Introducere
Lucrarea cu conținut 3D în Java necesită de obicei alegerea dintre greutatea grea. motoare de joc și biblioteci de matematică bare-bones. aspose-3d-foss Pachetul oferă un terenul mediu: o API focalizată de scenă-graph care gestionează fișierele I/O, ierarhie noduri, construcția de mesh, și coordonarea transformărilor fără a trage într-o renderare o lanţ de ţesut sau o reţea de dependenţă.
Aspose.3D FOSS pentru Java este o bibliotecă cu sursa deschisă distribuită sub licența MIT. oferă 80 de clase care cuprind managementul scenei, geometria, materialele și conversia formatului. Biblioteca citește FBX, glTF/GLB, Wavefront OBJ și STL și scrie gltF / GLB , OBG și StL (exportul FBX nu este implementat), făcând-o practică pentru procesarea 3D pe server, integrările de construcții și a pipelineselor de conversie a datelor care rulează pe Java 21 sau mai târziu.
Acest post trece prin abilitățile de management al scenei din bibliotecă: cum să construiți o scenă din scratch, să o populeze cu geometrie și transformări și să exportați rezultatul pe disc.
Ce este inclus
Scenariul Graph Basics
În acest caz, Scene Clasa este containerul de rădăcină pentru fiecare document 3D. Node, metadata activelor, clipurile de animație și sub-scene. puteți crea un gol scară și apoi să-l populeze, sau încărcați un fișier existent cu 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");
Fiecare Node Poate ţine un Entity (cum ar fi a Mesh sau Camera) a) a Transform, o listă de materiale, și noduri suplimentare pentru copii. structura copacului Mirrorul este modelul de scenă-graph utilizat de cele mai multe instrumente 3D de scriere.
Mesh construcție
În acest caz, Mesh Clasa vă permite să definiți geometria de la punctele de control și poligonul. - adăugați verticale cu addControlPoint,Apoi le conectați în fețe. Cu 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);
Apele de la Misa includ triangulate(), optimize(removeVertices),şi Boolean operaţiuni (union, difference, intersect(Dar aceste metode sunt stricte în în cursul lansării – acestea returnă un clon al mesei de intrare fără a efectua operaţiunea numită.
Transformarea şi poziţionarea
Fiecare Node Împreună cu a Transform care controlează traducerea locală, rotația, Aceste componente se compun prin ierarhie, astfel încât să se miște un nod parental. Se mişcă toate copiii.
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);
Pentru întrebări de poziționare absolută, apel node.getGlobalTransform() pentru a retrage Compoziţia GlobalTransform,sau node.evaluateGlobalTransform(true) Pentru a obține un Matrix4 Aceasta include o geometrie.
PBR materiale
În acest caz, PbrMaterial Clasa oferă proprietăți de renderare bazate pe fizică: Albedo, factor metalic, rigiditate, culoare emisivă și transparență. Adăugați un material la un nod atunci când creați copilul.
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);
Detectarea formatului
În acest caz, FileFormat clasa oferă utilități de vizualizare și detecție statică. puteți rezolvați un format prin extinderea fișierului sau verificați o flux pentru a identifica fișiere necunoscute.
import com.aspose.threed.FileFormat;
FileFormat fmt = FileFormat.getFormatByExtension("model.glb");
boolean canRead = fmt.getCanImport();
boolean canWrite = fmt.getCanExport();
Sistemul de convertire coordonată
AxisSystem să vă permită să definiți ascensiunea, ascensorul frontal și capacitatea de a Sistemul de coordonare, apoi calcularea a Matrix4 transformarea geometriei între convenții (de exemplu, de la un sistem Z-up cu mâna dreaptă la o Y-Up cu mâna stângă).
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);
Începe rapid
Adăugați dependența de Maven:
<dependency>
<groupId>org.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.5.0</version>
</dependency>Construiește o scenă simplă și o exportează:
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);
Formate susținute
| Formatul | extindere | Citește | Scriu |
|---|---|---|---|
| FBX (ASCII și binar, 6.x-7.x) | .fbx | Da | Nu |
| GST 1.0 / 2.0 | .gltf | Da | Da |
| GST binar | .glb | Da | Da |
| Vârstă OBJ | .obj | Da | Da |
| STL (ASCII și binar) | .stl | Da | Da |
Fiecare formă este dedicată LoadOptions şi SaveOptions Subclasele (pentru Exemplul este, FbxLoadOptions, GltfSaveOptions, StlSaveOptionsAceasta expune setări specifice formatului, cum ar fi coordonarea sistemului și tipul de conținut selecţie .
Sursă deschisă & Licențiere
Aspose.3D FOSS pentru Java este eliberat sub licența MIT. Codul de sursă este disponibil pe GitHub la Aspose.3D-FOSS pentru Java. Puteți utiliza, modifica și redistribui biblioteca în mod comercial și Proiecte non-comerciale fără restricții.
să înceapă
- Ghidul dezvoltatorului - API pe parcurs și Modele de utilizare
- Baza de cunoaştere Cum să scrieți articole și FAQ-uri
- Referință API - clasa completă şi Metoda documentării