Como carregar modelos 3D em Java

Como carregar modelos 3D em Java

aspose-3d-foss para Java fornece uma API simples para abrir arquivos 3D. Após carregar um arquivo em um Scene objeto, você pode percorrer a hierarquia de nós e ler os dados de geometria.

Guia passo a passo

Etapa 1: Instalar o pacote

Adicione a dependência Maven:

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

Etapa 2: Importar a classe Scene

import com.aspose.threed.Scene;
import com.aspose.threed.Node;
import com.aspose.threed.Mesh;

Etapa 3: Carregar um arquivo

Scene scene = new Scene();
scene.open("model.obj");

Ou use a fábrica estática:

Scene scene = Scene.fromFile("model.obj");

Formatos suportados: OBJ, STL, glTF 2.0 / GLB, FBX (apenas binário — FBX ASCII não é suportado e gera ImportException).


Etapa 4: Percorrer os nós da cena

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

Etapa 5: Acessar os dados da malha

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

Problemas comuns e correções

Exceção ao carregar

Verifique se o arquivo não está corrompido e se o formato é suportado (OBJ, STL, glTF, FBX).

NullPointerException ao acessar a entidade

Nem todo nó contém geometria. Sempre verifique node.getEntity() instanceof Mesh antes de converter.

Incompatibilidade de sistema de coordenadas

Use ObjLoadOptions.setFlipCoordinateSystem(true) ou aplique uma rotação após o carregamento.


Perguntas Frequentes (FAQ)

Quais formatos posso carregar?

OBJ, STL (binário e ASCII), glTF 2.0 / GLB e FBX. Para FBX, apenas binary FBX é suportado. Arquivos FBX ASCII gerarão ImportException("ASCII FBX format not yet supported - only binary FBX is supported").

Posso carregar a partir de um InputStream?

Sim. scene.open() aceita um InputStream.

A biblioteca é thread‑safe?

Cada Scene a instância é independente. Carregar arquivos separados em instâncias separadas a partir de threads separadas é seguro.

 Português