U uvodnom postu, pokrili smo što je Aspose.3D FOSS za Java i kako započeti. Ovaj post dublje istražuje ključne značajke koje čine biblioteku, s kodnim primjerima za svako područje.
Svi primjeri pretpostavljaju sljedeći import:
import com.aspose.threed.*;
I Maven ovisnost:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
API grafova scena
Graf scene je temelj Aspose.3D FOSS za Java. Svaki 3D model — bilo da je učitan iz datoteke ili izgrađen programatski — predstavlja se kao stablo čvorova ukorijenjeno u Scene objektu.
Scene
Klasa Scene klasa je ulazna točka za sve operacije. Možete stvoriti praznu scenu ili učitati jednu iz datoteke:
// 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());
Korijen stabla čvorova pristupa se putem getRootNode().
Node
A Node predstavlja imenovanu poziciju u stablu scene. Čvorovi mogu imati djecu, stvarajući hijerarhiju. Svaki čvor nosi lokalni Transform i izračunati 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");
Također možete neovisno konstruirati čvorove i kasnije ih priložiti:
Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);
Entity and Mesh
Jedan Entity je apstraktna bazna klasa za sve što se može prikačiti na čvor — geometriju, kamere i svjetla. Najčešći tip entiteta je Mesh, koji sadrži poligonalnu geometriju (vrhove, površine i normale).
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
Kamere su entiteti koji se pričvršćuju uz čvorove:
Scene scene = new Scene();
Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node
Definicije kamera se očuvaju pri izvozu u formate koji ih podržavaju (kao što je glTF).
Napomena: The Light klasa nije dostupna u Java izdanju. Podaci o osvjetljenju scene iz uvezenih datoteka pohranjeni su kao generički Entity objekti.
Učitavanje i spremanje neovisno o formatu
Jedna od prednosti biblioteke je da je graf scene neovisan o formatu. Učitate iz bilo kojeg podržanog formata, manipulirate scenom putem jedinstvenog API-ja i spremate u bilo koji podržani format.
// 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);
Format se određuje prema ekstenziji datoteke. Također možete proslijediti izričite opcije spremanja za kontrolu izlaza:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Materijali
Aspose.3D FOSS za Java pruža PBR (Physically Based Rendering) model materijala putem PbrMaterial. Ovo je jedina konkretna klasa materijala u Java izdanju.
PbrMaterial
Fizički temeljeni render materijal koji koristi parametre albedo, metalnost i hrapavost. Ovo je standardni model materijala za glTF i moderne real‑time engineove.
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
Očuvanje materijala kroz formate ovisi o mogućnostima odredišnog formata. PBR materijali se prirodno mapiraju na glTF i GLB izlaz.
Transformacija i Prostorni
Svaki Node u grafu scene ima Transform koji definira njegov položaj, rotaciju i skaliranje u odnosu na njegovog roditelja.
Lokalna Transformacija
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
Globalna transformacija
Ta GlobalTransform je izračunata transformacija u svjetskom prostoru, uzimajući u obzir cijeli lanac roditelja. Ovo je samo za čitanje i automatski se ažurira.
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();
Ovo nasljeđivanje transformacije roditelj‑dijete slijedi standardni uzorak scene‑graph koji koriste 3D enginei i DCC alati.
Matematički alati
Biblioteka uključuje osnovne matematičke tipove za 3D operacije.
Vector3
Vektor s tri komponente koji se koristi za pozicije, smjerove, normale i boje.
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 transformacijska matrica za kombiniranje translacije, rotacije i skaliranja u jedinstvenu operaciju.
Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform
Kvaternion
Reprezentacija rotacije koja izbjegava gimbal lock i interpolira glatko. Kvaternioni se interno koriste u transformacijskom sustavu.
BoundingBox
Axis-aligned bounding box za prostorne upite, provjere sudara i analizu scene.
BoundingBox bbox = new BoundingBox();
// BoundingBox can be computed from mesh geometry
Poznata ograničenja
Vrijedi napomenuti da Scene.render() je nije podržano u FOSS izdanju. Pozivanje će izazvati an UnsupportedOperationException. Biblioteka je dizajnirana za obradu 3D podataka temeljenu na datotekama — učitavanje, transformiranje i spremanje — umjesto renderiranja u stvarnom vremenu.
Sažetak
Ključne značajke Aspose.3D FOSS za Java dijele se na pet područja:
| Područje | Klase | Svrha |
|---|---|---|
| Graf scene | Scene, Node, Entity, Mesh, Camera | Hijerarhijska reprezentacija modela |
| Formati | Opcije učitavanja/spremanja za OBJ, STL, glTF/GLB; učitavanje za FBX | I/O neovisan o formatu |
| Materijali | PbrMaterial | Izgled površine (PBR) |
| Transformacije | Transform, GlobalTransform | Prostorno pozicioniranje |
| Matematika | Vector3, Matrix4, Quaternion, BoundingBox | 3D math primitives |
U sljedećem postu proći ćemo kroz praktične tutorijale po formatima koji pokrivaju OBJ, STL, glTF i FBX s detaljnim opcijama učitavanja i spremanja.