V úvodním příspěvku, jsme pokryli, co Aspose.3D FOSS pro Java je a jak začít. Tento příspěvek jde hlouběji do klíčových funkcí, které tvoří knihovnu, s ukázkami kódu pro každou oblast.
Všechny příklady předpokládají následující import:
import com.aspose.threed.*;
A Mavenová závislost:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
API scénového grafu
Scénový graf je základem Aspose.3D FOSS pro Java. Každý 3D model – ať už načtený ze souboru nebo vytvořený programově – je reprezentován jako strom uzlů zakořeněný v Scene objektu.
Scéna
Třída Scene třída je vstupním bodem pro všechny operace. Můžete vytvořit prázdnou scénu nebo načíst jednu ze souboru:
// Empty scene
Scene scene = new Scene();
// Load from file
Scene loaded = Scene.fromFile("model.obj");
// Load with explicit options
Scene fromStl = Scene.fromFile("part.stl", new StlLoadOptions());
Kořen stromu uzlů je přístupný přes getRootNode().
Uzel
A Node reprezentuje pojmenovanou pozici ve scénovém stromu. Uzly mohou mít potomky, čímž vytvářejí hierarchii. Každý uzel nese lokální Transform a vypočtený GlobalTransform.
Scene scene = new Scene();
// Create a child node under the root
Node box = scene.getRootNode().createChildNode("Box");
// Create a nested hierarchy
Node arm = scene.getRootNode().createChildNode("Arm");
Node hand = arm.createChildNode("Hand");
Node finger = hand.createChildNode("Finger");
Můžete také vytvářet uzly nezávisle a připojit je později:
Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);
Entita a Mesh
An Entity je abstraktní základní třída pro cokoliv, co může být připojeno k uzlu – geometrie, kamery a světla. Nejčastějším typem entity je Mesh, který obsahuje polygonální geometrii (vrcholy, plochy a normály).
Scene scene = Scene.fromFile("cube.obj");
// Traverse nodes and inspect entities
for (Node child : scene.getRootNode().getChildNodes()) {
Entity entity = child.getEntity();
if (entity instanceof Mesh) {
Mesh mesh = (Mesh) entity;
System.out.println("Node: " + child.getName());
System.out.println(" Vertices: " + mesh.getControlPoints().size());
}
}
Kamera
Kamery jsou entity, které se připojují k uzlům:
Scene scene = new Scene();
Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node
Definice kamer jsou zachovány při exportu do formátů, které je podporují (např. glTF).
Poznámka: The Light třída není k dispozici v edici Java. Data o osvětlení scény z importovaných souborů jsou uložena jako obecné Entity objekty.
Načítání a ukládání nezávislé na formátu
Jednou ze silných stránek knihovny je, že graf scény je nezávislý na formátu. Načtete z libovolného podporovaného formátu, manipulujete se scénou pomocí jediné API a uložíte do libovolného podporovaného formátu.
// Load OBJ, save as glTF
Scene scene = Scene.fromFile("input.obj");
scene.save("output.gltf");
// Load FBX, save as STL (FBX is import only)
Scene scene2 = Scene.fromFile("character.fbx");
scene2.save("character.stl");
// Load STL, save as GLB
Scene scene3 = Scene.fromFile("part.stl", new StlLoadOptions());
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene3.save("part.glb", opts);
Formát je určen příponou souboru. Můžete také předat explicitní možnosti ukládání pro kontrolu výstupu:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Materiály
Aspose.3D FOSS pro Java poskytuje model materiálu PBR (Physically Based Rendering) prostřednictvím PbrMaterial. Toto je jediná konkrétní třída materiálu v edici Java.
PbrMaterial
Materiál založený na fyzikálně založeném renderování, který používá parametry albedo, metalnost a drsnost. Jedná se o standardní model materiálu pro glTF a moderní real‑time enginy.
PbrMaterial pbr = new PbrMaterial();
pbr.setAlbedo(new Vector4(0.8, 0.2, 0.2, 1.0)); // Red-ish base color
pbr.setMetallicFactor(0.0); // Non-metallic
pbr.setRoughnessFactor(0.5); // Medium roughness
Zachování materiálu napříč formáty závisí na schopnostech cílového formátu. PBR materiály se přirozeně mapují na výstup glTF a GLB.
Transform a Spatial
Každý Node v grafu scény má Transform který určuje jeho polohu, rotaci a měřítko relativně k jeho rodiči.
Lokální transformace
Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("TestNode");
Transform t = node.getTransform();
t.setTranslation(1, 2, 3); // Position
t.setScale(2, 2, 2); // Uniform scale
t.setEulerAngles(0, 45, 0); // Euler rotation in degrees
Globální transformace
Tento GlobalTransform je vypočtená transformace ve světovém prostoru, která zohledňuje celý řetězec rodičů. Toto je jen pro čtení a aktualizuje se automaticky.
Node parent = scene.getRootNode().createChildNode("Parent");
parent.getTransform().setTranslation(10, 0, 0);
Node child = parent.createChildNode("Child");
child.getTransform().setTranslation(5, 0, 0);
// Child's global position is (15, 0, 0)
GlobalTransform global = child.getGlobalTransform();
Toto dědění transformací mezi rodičem a potomkem následuje standardní vzor grafu scény používaný 3D enginy a nástroji DCC.
Math Utilities
Knihovna obsahuje základní matematické typy pro 3D operace.
Vector3
Trojkomponentový vektor používaný pro pozice, směry, normály a barvy.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
// Addition
Vector3 sum = Vector3.add(a, b); // (1, 1, 0)
Matrix4
4x4 transformační matice pro kombinaci translace, rotace a měřítka do jediné operace.
Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform
Quaternion
Reprezentace rotace, která zabraňuje gimbal locku a interpoluje plynule. Kvaterniony jsou interně používány transformačním systémem.
BoundingBox
Osa‑zarovnaná BoundingBox pro prostorové dotazy, kontrolu kolizí a analýzu scény.
BoundingBox bbox = new BoundingBox();
// BoundingBox can be computed from mesh geometry
Známá omezení
Stojí za zmínku, že Scene.render() je není podporováno v edici FOSS. Volání vyvolá UnsupportedOperationException. Knihovna je navržena pro souborově založené 3D zpracování – načítání, transformaci a ukládání – spíše než pro renderování v reálném čase.
Shrnutí
Klíčové funkce Aspose.3D FOSS pro Java se dělí do pěti oblastí:
| Oblast | Třídy | Účel |
|---|---|---|
| Graf scény | Scene, Node, Entity, Mesh, Camera | Hierarchické modelové znázornění |
| Formáty | Možnosti načítání/ukládání pro OBJ, STL, glTF/GLB; načítání pro FBX | Formátově agnostický I/O |
| Materiály | PbrMaterial | Vzhled povrchu (PBR) |
| Transformace | Transform, GlobalTransform | Prostorové umístění |
| Matematika | Vector3, Matrix4, Quaternion, BoundingBox | 3D math primitives |
V dalším příspěvku projdeme praktické tutoriály formát po formátu, které pokrývají OBJ, STL, glTF a FBX s podrobnými možnostmi načítání a ukládání.