U uvodnom postu, pokrili smo šta je Aspose.3D FOSS za Java i kako da počnete. Ovaj post dublje istražuje ključne funkcije koje čine biblioteku, sa primerima koda za svako područje.

Svi primeri pretpostavljaju sledeći import:

import com.aspose.threed.*;

I Maven zavisnost:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

API grafika scene

Graf scene je temelj Aspose.3D FOSS za Java. Svaki 3D model – bilo da je učitan iz fajla ili izgrađen programatski – predstavlja se kao stablo čvorova ukorenjeno u Scene objektu.

Scene

Klasa Scene je ulazna tačka za sve operacije. Možete kreirati praznu scenu ili učitati jednu iz fajla:

// 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());

Koreni čvor stabla se pristupa putem getRootNode().

Node

A Node predstavlja imenovanu poziciju u stablu scene. Čvorovi mogu imati decu, formirajući hijerarhiju. Svaki čvor nosi lokalni Transform i izračunatu 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đe možete konstruisati čvorove nezavisno i kasnije ih prikačiti:

Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);

Entity i Mesh

Jedan Entity je apstraktna osnovna klasa za sve što se može prikačiti na čvor – geometriju, kamere i svetla. 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());
    }
}

Camera

Kamere su entiteti koji se prikačuju na čvorove:

Scene scene = new Scene();

Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node

Definicije kamera se čuvaju prilikom izvoza u formate koji ih podržavaju (kao što je glTF).

Napomena: The Light klasa nije dostupna u Java izdanju. Podaci o osvetljenju scene iz uvezenih fajlova se čuvaju kao generički Entity objekti.

Učitavanje i čuvanje nezavisno od formata

Jedna od prednosti biblioteke je što je graf scena nezavisan od formata. Učitate iz bilo kojeg podržanog formata, manipulišete scenom kroz jedinstveni API i sačuvate 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 ekstenzijom fajla. Takođe možete proslediti eksplicitne opcije za čuvanje kako biste kontrolisali izlaz:

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

Materijal za fizički zasnovano renderovanje koji koristi parametre albedo, metalnost i hrapavost. Ovo je standardni model materijala za glTF i moderne real‑time engine‑e.

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 između formata zavisi od mogućnosti ciljnog formata. PBR materijali se prirodno mapiraju na glTF i GLB izlaz.

Transform i Spatial

Svaki Node u grafu scene ima Transform koja definiše njegov položaj, rotaciju i skalu 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

Ovaj GlobalTransform je izračunati transformacija u svetskom prostoru, uzimajući u obzir čitav 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 nasleđivanje transformacija roditelj‑dete prati standardni obrazac grafova scene koji koriste 3D engine‑i i DCC alati.

Matematički alati

Biblioteka uključuje osnovne matematičke tipove za 3D operacije.

Vector3

Vektor sa tri komponente koji se koristi za pozicije, pravce, 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 matrična transformacija za kombinovanje translacije, rotacije i skaliranja u jedinstvenu operaciju.

Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform

Quaternion

Reprezentacija rotacije koja izbegava gimbal lock i glatko interpolira. Kvaternioni se interno koriste u sistemu transformacija.

BoundingBox

BoundingBox osovinski poravnat okvir za prostorne upite, provere sudara i analizu scene.

BoundingBox bbox = new BoundingBox();
// BoundingBox can be computed from mesh geometry

Poznata ograničenja

Vredno je napomenuti da Scene.render() je nije podržano u FOSS izdanju. Pozivanje će izazvati UnsupportedOperationException. Biblioteka je dizajnirana za obradu 3D podataka zasnovanu na fajlovima – učitavanje, transformisanje i čuvanje – umesto renderovanja u realnom vremenu.

Sažetak

Ključne karakteristike Aspose.3D FOSS za Java se dele na pet oblasti:

OblastKlaseSvrha
Scenski grafScene, Node, Entity, Mesh, CameraHijerarhijsko predstavljanje modela
FormatiOpcije učitavanja/čuvanja za OBJ, STL, glTF/GLB; učitavanje za FBXI/O nezavisan od formata
MaterijaliPbrMaterialIzgled površine (PBR)
TransformacijeTransform, GlobalTransformProstorno pozicioniranje
MatematikaVector3, Matrix4, Quaternion, BoundingBox3D math primitives

U sledećem postu proći ćemo kroz praktične tutorijale po formatima koji pokrivaju OBJ, STL, glTF i FBX, sa detaljnim opcijama učitavanja i čuvanja.