Come caricare modelli 3D in Java
aspose-3d-foss per Java fornisce un’API semplice per aprire file 3D. Dopo aver caricato un file in un Scene oggetto è possibile attraversare la gerarchia dei nodi e leggere i dati geometrici.
Guida passo-passo
Passo 1: Installa il pacchetto
Aggiungi la dipendenza Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>Passo 2: Importa la classe Scene
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
import com.aspose.threed.Mesh;Passo 3: Carica un file
Scene scene = new Scene();
scene.open("model.obj");Oppure usa la factory statica:
Scene scene = Scene.fromFile("model.obj");Formati supportati: OBJ, STL, glTF 2.0 / GLB, FBX (solo binario — ASCII FBX non è supportato e genera ImportException).
Passo 4: Attraversa i nodi della scena
void walk(Node node, int depth) {
String indent = " ".repeat(depth * 2);
System.out.println(indent + "Node: " + node.getName());
for (Node child : node.getChildNodes()) {
walk(child, depth + 1);
}
}
walk(scene.getRootNode(), 0);Passo 5: Accedi ai dati della mesh
for (Node node : scene.getRootNode().getChildNodes()) {
if (node.getEntity() instanceof Mesh) {
Mesh mesh = (Mesh) node.getEntity();
System.out.println("Mesh '" + node.getName() + "': " +
mesh.getControlPoints().size() + " vertices, " +
mesh.getPolygonCount() + " polygons");
}
}Problemi comuni e soluzioni
Eccezione durante il caricamento
Verifica che il file non sia corrotto e che il formato sia supportato (OBJ, STL, glTF, FBX).
NullPointerException durante l’accesso all’entità
Non tutti i nodi contengono geometria. Controlla sempre node.getEntity() instanceof Mesh prima del cast.
Incongruenza del sistema di coordinate
Usa ObjLoadOptions.setFlipCoordinateSystem(true) oppure applica una rotazione dopo il caricamento.
Domande frequenti (FAQ)
Quali formati posso caricare?
OBJ, STL (binario e ASCII), glTF 2.0 / GLB e FBX. Per FBX, solo FBX binario è supportato. I file FBX ASCII genereranno ImportException("ASCII FBX format not yet supported - only binary FBX is supported").
Posso caricare da un InputStream?
Sì. scene.open() accetta un InputStream.
La libreria è thread-safe?
Ogni Scene istanza è indipendente. Caricare file separati in istanze separate da thread separati è sicuro.