Uvod
Rad sa 3D sadržajem u Java obično zahteva izbor između teških game engine‑a i minimalističkih matematičkih biblioteka. Ovaj aspose-3d-foss paket nudi srednji put: fokusirani scene-graph API koji upravlja file I/O, node hierarchies, mesh konstrukcijom i koordinatnim transformacijama bez uključivanja rendering pipeline‑a ili nativnog lanca zavisnosti.
Aspose.3D FOSS za Java je open‑source biblioteka distribuirana pod MIT licencom. Pruža 80 klasa koje pokrivaju upravljanje scenama, geometriju, materijale i konverziju formata. Biblioteka čita FBX, glTF/GLB, Wavefront OBJ i STL, i piše glTF/GLB, OBJ i STL (izvoz u FBX nije implementiran), čineći je praktičnom za server‑side 3D obradu, integracije alata za izgradnju i pipeline‑ove za konverziju podataka koji rade na Java 21 ili novijim.
Ovaj post prolazi kroz mogućnosti upravljanja scenama u biblioteci: kako izgraditi scenu od nule, popuniti je geometrijom i transformacijama, i izvesti rezultat na disk.
Šta je uključeno
Osnove grafova scena
Ovaj Scene klasa je koreni kontejner za svaki 3D dokument. Ona drži root Node, metapodaci o sredstvima, animacioni klipovi i pod‑scene. Možete kreirati praznu scenu i zatim je popuniti, ili učitati postojeću datoteku sa Scene.fromFile.
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
Scene scene = new Scene();
Node root = scene.getRootNode();
// Add named child nodes to build a hierarchy
Node chassis = root.createChildNode("Chassis");
Node wheel = chassis.createChildNode("FrontLeftWheel");
Svaki Node može da sadrži Entity (kao što je Mesh ili Camera), jedan Transform, listu materijala i dodatne čvorove dece. Struktura stabla odražava obrazac scene-graph koji koriste većina 3D alata za autorstvo.
Konstrukcija Mesh-a
The Mesh klasa vam omogućava da definišete geometriju iz kontrolnih tačaka i poligona indeksi. Dodajete vrhove pomoću addControlPoint, zatim ih povežete u površine sa createPolygon.
import com.aspose.threed.Mesh;
Mesh box = new Mesh("Box");
// Define eight corners of a cube
box.addControlPoint(0, 0, 0);
box.addControlPoint(1, 0, 0);
box.addControlPoint(1, 1, 0);
box.addControlPoint(0, 1, 0);
box.addControlPoint(0, 0, 1);
box.addControlPoint(1, 0, 1);
box.addControlPoint(1, 1, 1);
box.addControlPoint(0, 1, 1);
// Create quad faces
box.createPolygon(0, 1, 2, 3); // back
box.createPolygon(4, 5, 6, 7); // front
box.createPolygon(0, 4, 7, 3); // left
box.createPolygon(1, 5, 6, 2); // right
box.createPolygon(3, 2, 6, 7); // top
box.createPolygon(0, 1, 5, 4); // bottom
scene.getRootNode().createChildNode("Box", box);
Mesh API uključuje triangulate(), optimize(removeVertices), i Boolean operacije (union, difference, intersect), ali ove metode su stubovi u trenutnoj verziji — oni vraćaju klon ulazne mreže bez izvršavanja imenovane operacije.
Transformacije i pozicioniranje
Svaki Node nosi Transform koji kontroliše njegovu lokalnu translaciju, rotaciju, i skaliranje. Ovi se kombinuju kroz hijerarhiju tako da pomeranje roditeljskog čvora pomera svu svoju decu.
import com.aspose.threed.Transform;
import com.aspose.threed.Node;
Node node = scene.getRootNode().createChildNode("Shifted");
Transform t = node.getTransform();
t.setTranslation(5.0, 0.0, -3.0);
t.setScale(2.0, 2.0, 2.0);
t.setEulerAngles(0, 45.0, 0);
Za upite apsolutnog pozicioniranja, pozovite node.getGlobalTransform() da biste dohvatili sastavljeni GlobalTransform, ili node.evaluateGlobalTransform(true) da biste dobili Matrix4 koji uključuje geometrijske pomake.
PBR materijali
The PbrMaterial klasa pruža svojstva fizički zasnovanog renderovanja: albedo boja, metalni faktor, hrapavost, emisijska boja i prozirnost. Dodelite materijal čvoru prilikom kreiranja deteta.
import com.aspose.threed.PbrMaterial;
import com.aspose.threed.Vector4;
import com.aspose.threed.Vector3;
PbrMaterial mat = new PbrMaterial("RedMetal");
mat.setAlbedo(new Vector4(0.9, 0.1, 0.1, 1.0));
mat.setMetallicFactor(0.8);
mat.setRoughnessFactor(0.3);
mat.setEmissiveColor(new Vector3(0, 0, 0));
scene.getRootNode().createChildNode("Part", box, mat);
Detekcija formata
The FileFormat klasa pruža statičke alate za pretragu i detekciju. Možete odrediti format po ekstenziji fajla ili ispitati tok da biste identifikovali nepoznate fajlove.
import com.aspose.threed.FileFormat;
FileFormat fmt = FileFormat.getFormatByExtension("model.glb");
boolean canRead = fmt.getCanImport();
boolean canWrite = fmt.getCanExport();
Konverzija koordinatnog sistema
AxisSystem omogućava vam da definišete osu gore, osu napred i pravac ruke jednog koordinatnog sistema, zatim izračunate a Matrix4 za transformaciju geometrije između konvencije (na primer, iz Z‑gore desnorukog sistema u Y‑gore levorukog).
import com.aspose.threed.AxisSystem;
import com.aspose.threed.Axis;
import com.aspose.threed.CoordinateSystem;
import com.aspose.threed.Matrix4;
AxisSystem source = new AxisSystem(
CoordinateSystem.RIGHT_HANDED, Axis.Z_AXIS, Axis.Y_AXIS);
AxisSystem target = new AxisSystem(
CoordinateSystem.LEFT_HANDED, Axis.Y_AXIS, Axis.Z_AXIS);
Matrix4 conversion = source.transformTo(target);
Brzi početak
Dodajte Maven zavisnost:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Izgradite jednostavnu scenu i izvezite je:
import com.aspose.threed.Scene;
import com.aspose.threed.Mesh;
import com.aspose.threed.Node;
import com.aspose.threed.StlSaveOptions;
import com.aspose.threed.FileContentType;
Scene scene = new Scene();
Mesh mesh = new Mesh("Triangle");
mesh.addControlPoint(0, 0, 0);
mesh.addControlPoint(1, 0, 0);
mesh.addControlPoint(0, 1, 0);
mesh.createPolygon(0, 1, 2);
scene.getRootNode().createChildNode("Shape", mesh);
StlSaveOptions opts = new StlSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("output.stl", opts);
Podržani formati
| Format | Ekstenzija | Čitanje | Pisanje |
|---|---|---|---|
| FBX (ASCII and Binary, 6.x-7.x) | .fbx | Da | Ne |
| glTF 1.0 / 2.0 | .gltf | Da | Da |
| glTF Binary | .glb | Da | Da |
| Wavefront OBJ | .obj | Da | Da |
| STL (ASCII i Binary) | .stl | Da | Da |
Svaki format ima posvećen LoadOptions i SaveOptions podklase (za primer, FbxLoadOptions, GltfSaveOptions, StlSaveOptions) koje izlažu podešavanja specifična za format, kao što su preokretanje koordinatnog sistema i tip sadržaja selekciju.
Open source i licenciranje
Aspose.3D FOSS za Java je objavljen pod MIT licencom. Izvorni kod je dostupan na GitHub-u na Aspose.3D-FOSS-for-Java. Možete koristiti, menjati i redistribuisati biblioteku u komercijalnim i nekomercijalnim projektima bez ograničenja.
Početak
- Vodič za programere – API pregledi i obrasci korišćenja
- Baza znanja – Uputstva i FAQ
- API referenca – Potpuna klasa i dokumentacija metoda