Introduzione

Lavorare con contenuti 3D in Java richiede di solito la scelta tra pesanti motori di gioco e librerie di bar-bones. il aspose-3d-foss Il pacchetto offre un terreno medio: un’API focalizzata di scena-graffo che gestisce file I/O, ierarche dei nodi, costruzione di mezzogiorno, e coordinare le trasformazioni senza tirare in un rendering La catena di dipendenza o la catene di dependenze.

Aspose.3D FOSS per Java è una biblioteca open source distribuita sotto la licenza MIT. fornisce 80 classi di gestione della scena, geometria, materiali e conversione del formato. La biblioteca legge FBX, glTF/GLB, Wavefront OBJ e STL, ed scrive gltF / GLB , OBG e Stl (esportazione FBx non viene implementata), rendendola pratica per il server-side 3D elaborazione, integrazioni strumento costruito e pipeline di conversioni dati che funzionano su Java 21 o più tardi.

Questo post passa attraverso le capacità di gestione della scena nella biblioteca: come costruire una scena dal scratch, la popolare con geometria e trasformazioni, ed esportare il risultato al disco.


Cosa è incluso

Sceneggiatura Graph Basics

Il Scene La classe è il contenitore di radice per ogni documento 3D. Ha una radica Node,Metadati di attività, clip animazioni e sottoscene. puoi creare un vuoto scena e poi la popolare, o caricare un file esistente con 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");

Ogni Node Può tenere un Entity (come a Mesh o Cameraa) di Transform, un elenco di materiali, e ulteriori nodi per bambini. struttura dell’albero Il modello di sceneggiatura utilizzato dalla maggior parte degli strumenti di autoria 3D.

Mesh costruzione

Il Mesh La classe ti consente di definire la geometria dai punti di controllo e dalla poligona. Indice. si aggiungono verticali con addControlPoint,e poi li collegare in facce con 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);

Il fuoco di Mesh include triangulate(), optimize(removeVertices),e il Boolean operazioni (union, difference, intersectma questi metodi sono in la rilascio corrente - restituiscono un clone della messa di input senza eseguire La denominata operazione.

Trasformazione e posizionamento

Ogni Node porta a Transform che controlla la sua traduzione locale, rotazione, Questi compose attraverso la gerarchia in modo che si muova un nodo genitore Mova tutti i suoi figli.

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

Per chiedere la posizione assoluta, chiamare node.getGlobalTransform() per ritrovare Il composito GlobalTransform,o node.evaluateGlobalTransform(true) Per ottenere un Matrix4 Questo include i offset geometrici.

Materiali PBR

Il PbrMaterial La classe fornisce proprietà di rendering fisicamente basate: colore albedo, fattore metallico, rigidità, colore emissivo e trasparenza. Assegnare un materiale a un nodo quando si crea il bambino.

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

Il formato della rilevazione

Il FileFormat classe fornisce utilità di ricerca statica e rilevamento. si può risolvere un formato con l’estensione del file o cercare una flusso per identificare i file sconosciuti.

import com.aspose.threed.FileFormat;

FileFormat fmt = FileFormat.getFormatByExtension("model.glb");
boolean canRead  = fmt.getCanImport();
boolean canWrite = fmt.getCanExport();

Coordinate-sistema di conversione

AxisSystem Permette di definire l’asse superiore, l’asse anteriore e la portata di un Il sistema di coordinamento, quindi calcolare un Matrix4 Per trasformare la geometria tra convenzioni (ad esempio, da un sistema a destra Z-up a Y-Up di una mano sinistra).

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

Rapido inizio

Aggiungi la dipendenza Maven:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.0</version>
</dependency>

Crea una scena semplice e esportarla:

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

Formati supportati

formatiestensioneLeggiscrivete
FBX (ASCII e binario, 6.x-7.x).fbxNo non
GF 1.0 / 2.0.gltf
Il GTTF binario.glb
Il fronte OBJ.obj
STL (ASCII e binario).stl

Ogni formato è dedicato LoadOptions e SaveOptions I sub-classe (per per esempio, FbxLoadOptions, GltfSaveOptions, StlSaveOptionsche esprime Impostazioni specifiche per il formato, come la flessione del sistema di coordinate e il tipo di contenuto di selezione.


Open Source e Licenza

Aspose.3D FOSS per Java è rilasciato sotto la licenza MIT. Il codice sorgente è Disponibile su GitHub Aspose3D-FOSS per Java. Puoi utilizzare, modificare e redistribuire la biblioteca in modo commerciale e Progetti non commerciali senza restrizioni.


Avviare a