3D rendering v FXGL a JavaFX: možnosti, limity a integrace s modelováním systémů
Kamera v JavaFX 3D nabízí plnou kontrolu nad parametry pohledu. Nastavení úhlu zorného pole (FOV) umožňuje dynamicky měnit úhel pohledu prostřednictvím vazeb:
camera3D.getPerspectiveCamera().fieldOfViewProperty().bind(cam_val);
Úprava blízké a vzdálené střižné roviny optimalizuje rendering tím, že vyloučí neviditelné objekty. Transformace Translate a Rotate zajišťují pohyb a rotaci kamery.
Pro připojení kamery k objektu, např. automobilu, se používá výpočet pozice:
var distanceToCamera = -8;
var pos = entity.getPosition3D().subtract(entity.getTransformComponent().getDirection3D().multiply(distanceToCamera));
transform.setPosition3D(pos);
transform.lookAt(entity.getPosition3D());
transform.setY(entity.getY() + CAMERA_HEIGHT_OFFSET);
Vyhlazení pohybu se realizuje interpolací s koeficienty:
double smoothXY = 0.2;
double smoothZ = 0.2;
var distanceToCamera = -8;
var targetPos = entity.getPosition3D().subtract(
entity.getTransformComponent().getDirection3D().multiply(distanceToCamera)
);
double newX = cameraPos.getX() + (targetPos.getX() - cameraPos.getX()) * smoothXY;
double newY = cameraPos.getY() + (targetPos.getY() - cameraPos.getY()) * smoothXY;
double newZ = cameraPos.getZ() + (targetPos.getZ() - cameraPos.getZ()) * smoothZ;
cameraPos = new Point3D(newX, newY, newZ);
transform.setPosition3D(cameraPos);
transform.lookAt(entity.getPosition3D());
transform.setY(cameraPos.getY() + CAMERA_HEIGHT_OFFSET);
Tím lze vytvářet plynulé kinematografické efekty a interaktivní ovládání.
Materiály PhongMaterial a texturování
PhongMaterial podporuje mapy pro realistický rendering:
- diffuseMap: základní textura a barva povrchu.
- normalMap: simulace reliéfu bez dodatečné geometrie, šetří zdroje.
- specularMap: ovládání odlesků na površích.
- specularPower: nastavení stupně lesku od matného po zrcadlový.
NormalMap lze generovat automaticky z diffuseMap pro rychlé texturování.
Import modelů a shadery
Podporovány jsou formáty .obj, .3ds s zachováním hierarchie a transformací. Import vytváří připravené uzly JavaFX (MeshView, Group).
Integrace GLSL shaderů přes nízkou úroveň API:
- Vertex a fragment shadery pro vlastní rendering.
- Nahrazení standardního Phong osvětlení neonovým, stylizovaným nebo procedurálními efekty.
- Řízení textur a atributů vrcholů ve shaderech.
Připojení přes ShaderProgram rozšiřuje standardní pipeline.
Limity JavaFX 3D
Absence stínů
Objekty neodrážejí stíny. Pro imitaci je nutné ruční vytváření polygonů. Dynamické shadow mapping není dostupné bez volání OpenGL.
Omezené osvětlení
Dostupné jsou PointLight, DirectionalLight, AmbientLight. Chybí Spotlight. Per-vertex lighting způsobuje artefakty na modelech s nízkým počtem polygonů. Nastavení intenzity a útlumu není dostatečně flexibilní.
Chybí fyzikální engine
Není detekce kolizí, gravitace ani setrvačnosti. Realizace vyžaduje ruční kód nebo externí knihovny.
Pouze kódová sestava scén
Není WYSIWYG editor. Scény se staví přes Group, SubScene, MeshView v Java kódu.
Integrace s RepeatCore pro modelování systémů
Pro krosplatformové aplikace s matematickými modely se připojuje RepeatCore:
RepeatCore.parseClassMap();
RepeatCore.runtimeAsService = true;
RepeatCore.isSingle = true;
RepeatCoreService.runtimeAsService = true;
RepeatCoreServiceDocument.verboseLevel = 0;
RepeatCoreServiceDocument.startWithoutBinFile = true;
var repeatCoreService = new RepeatCoreService();
var tempdoc = new RepeatCoreServiceDocument();
serviceDocument = tempdoc.openDocument(filename);
serviceDocument.setParentRepeatCoreService(repeatCoreService);
serviceDocument.documentCalculate();
Získání objektů podle ID:
speed_setpoint = (Constant) getObjbyIdFromList(serviceDocument.componentList, "1739110251130");
Aktualizace dat přes vazby nebo streamy se synchronizuje s 3D renderingem v FXGL. To umožňuje vytvářet aplikace pro řízení elektropohonů s vizualizací.
Příklad: demo řízení elektropohonu s grafy a 3D scénou.
Praktická realizace v FXGL
Přenos assetů ze starých her (NFS) do FXGL vyžaduje iterace nad měřítkem, osvětlením a modely. Řešení problémů měřítka a import textur demonstruje praktickou použitelnost pro prototypy.
Přidání UI pro nastavení světla a stromu objektů usnadňuje ladění.
Co je důležité:
- FXGL + JavaFX 3D je vhodné pro prototypy a gamifikované simulátory, ne pro produkční hry.
- PhongMaterial s normalMap zajišťuje přijatelný vizuál bez vysoké polygonizace.
- Integrace RepeatCore umožňuje vestavovat modelování systémů do 3D aplikací.
- Hlavní limity: chybí stíny, fyzika a vizuální editor.
- GLSL shadery rozšiřují rendering pro vlastní efekty.
— Editorial Team
Zatím žádné komentáře.