Aspose.3D FOSS para Java suporta cinco formatos de arquivo 3D: OBJ, STL, GSTF, GLB,e FBX Este post é um guia prático, de formato para formato que mostra como carregar e salvar cada um deles, quais opções estão disponíveis e como converter entre eles.

Todos os exemplos utilizam o com.aspose.threed.* Pacote de:

import com.aspose.threed.*;

Maven dependência:

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

Formato Paisagem

Antes de mergulhar, aqui está uma rápida visão geral dos quatro formatos suportados e seus casos típicos de uso.

FormatoExtensãoImportaçãoExportaçãoApoio materialA hierarquia do cenário
OBJ.objSimSimFicheiros de base (MTL)Flat
STL.stlSimSimNenhumaFlat
GST 2.0.gltfSimSimPBRCompletos
GLB.glbSimSimPBRCompletos
FBX.fbxSimNãoRicoCompletos

OBJ, STL, glTF e GLB suportam tanto importação como exportação. Só importação.GLB (GlTF binário) é produzido através de GltfSaveOptions com setContentType(FileContentType.BINARY).

OBJ: Objeto de frente da onda

OBJ é um dos formatos de mesh 3D mais amplamente suportados. armazenará geometria como texto plano, com uma opção opcional .mtl arquivo de companheiros para materiais.

Carregar arquivos OBJ

A abordagem mais simples é passar o caminho de arquivo diretamente:

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

Para mais controle, uso ObjLoadOptions:

ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);

Quando o arquivo OBJ se refere a um arquito MTL (via uma mtllib A diretiva), a biblioteca tentará carregar definições de material automaticamente. o arquivo MTL deve estar no mesmo directorio que o ficheiro OBJ ou na estrada especificada na directiva.

Como se esconder o OBJ

Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");

OBS usa casos

  • Troca de dados entre diferentes ferramentas 3D.
  • Importação de modelos das bibliotecas de ativos que distribuem em formato OBJ.
  • Inspecção rápida da geometria sem hierarquias complexas de cena.

Título: Stereolithografia

O STL é o formato padrão para a impressão 3D. representa geometria triangular sem materiais, cores ou hierarquia de cena. arquivos STl vêm em duas variantes: ASCII (humano-leível) e binário (compact).

Carregar arquivos STL

// Simple load
Scene scene = Scene.fromFile("part.stl");

// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);

Avaliação como STL

Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");

Para controlar a produção, use StlSaveOptions:

StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);

Considerações STL

  • A STL só armazena geometria triângulo. materiais, texturas e hierarquia de cena não são suportados e são lançados em exportação.
  • A exportação do STL Não Trilhão automaticamente. STL binário escreve apenas as primeiras 3 vertices de cada poligono; quad e n-gon faces são silenciosamente truncados. ASCII ST L escrever todos os índices verticais por face, produzindo desvio malformado para não triângulos facas. Sempre usar meshas pré-trianguladas (todos triángulos face) quando exportando para STl.
  • O STL binário é significativamente menor do que o ASCII STl para modelos grandes.
  • STL é o formato de escolha quando o alvo é um software 3D ou impressora.

GLTF: Formato de Transmissão GL

O glTF é um formato moderno projetado para a transmissão e carregamento eficiente de conteúdo 3D, especialmente na web e em aplicações em tempo real.

Carregar arquivos glTF

Scene scene = Scene.fromFile("scene.gltf");

// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);

Como economizar como gltf

O saldo básico usa a extensão de arquivo para determinar o formato:

scene.save("output.gltf");

Para um controle detalhado, uso GltfSaveOptions:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

GltfSaveOptions Detalhes

MétodoObjetivo
setFlipCoordinateSystem(boolean)Flip o eixo do sistema de coordenadas durante a exportação. útil quando converter de Y-up para Z-Up ou vice-versa.
setPrettyPrint(boolean)Formate a saída JSON com indentação para leitura. false Para tamanho de arquivo menor na produção.

GSTU utiliza casos de

  • 3D de visualização baseada na Web (three.js, Babylon.js).
  • Aplicações em tempo real e motores de jogos.
  • Preservar as definições de material PBR em todas as ferramentas.

FBX: Filmbox (Só importação)

O FBX é um formato proprietário da Autodesk que é amplamente utilizado no desenvolvimento de jogos e na criação de conteúdo digital. Aspose.3D FOSS para Java suporta o FBx para Só importação - Exportação para FBX não está disponível.

Binar apenas FBX. O importador FBX lê apenas arquivos binários FB X. Passando um arquivo ASCII FBx jogou ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). hierarquia de nuvens e extração de materiais do FBX não são totalmente verificados; cenas complexas do FBX podem não ser carregadas completamente.

Carregar arquivos FBX

Scene scene = Scene.fromFile("character.fbx");

// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);

Converter FBX para outros formatos

Como a exportação do FBX não é suportada, converte as cenas importadas do FbX para glTF, GLB, OBJ ou STL:

Scene scene = Scene.fromFile("character.fbx");

// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);

FBX utiliza Casos de Conhecimento

  • Importar ativos de mesh estáticos das ferramentas Autodesk (Maya, 3ds Max) e converter para outros formatos.
  • Carregar geometria binária FBX e re-exportar para glTF/GLB, OBJ ou STL.

Conversão Batch

Um fluxo de trabalho comum é a conversão de um conjunto inteiro de arquivos de uma forma para outra. Aqui está um padrão para a convertição de batch:

import com.aspose.threed.*;
import java.io.File;

public class BatchConvert {
    public static void main(String[] args) throws Exception {
        File inputDir = new File("models/obj");
        File outputDir = new File("models/gltf");
        outputDir.mkdirs();

        GltfSaveOptions saveOpts = new GltfSaveOptions();
        saveOpts.setPrettyPrint(true);

        File[] objFiles = inputDir.listFiles(
            (dir, name) -> name.toLowerCase().endsWith(".obj")
        );

        if (objFiles == null) return;

        for (File objFile : objFiles) {
            String baseName = objFile.getName()
                .replaceFirst("\\.obj$", "");

            Scene scene = Scene.fromFile(objFile.getAbsolutePath());
            String outPath = new File(outputDir, baseName + ".gltf")
                .getAbsolutePath();

            scene.save(outPath, saveOpts);
            System.out.println("Converted: " + objFile.getName()
                + " -> " + baseName + ".gltf");
        }
    }
}

Isso carrega todos os .obj arquivo em um diretório, converte cada um para glTF com uma saída bem impressos e salva os resultados. Você pode adaptar este padrão para qualquer combinação de formato fonte e alvo.

Referência de conversão em formato cruzado

A tabela abaixo mostra o que esperar quando converter entre formatos.

dePara oGeometriaMateriaisHierarquiaNotas
OBJSTLPreservadoPerdidaN/AA STL não tem suporte material
OBJGST / GLBPreservadoConvertido em PBRFlatMateriais de MTL mapeados onde possível
STLOBJPreservadoNenhumaN/ANão há material na fonte
STLGST / GLBPreservadoDefiniçãoFlatMaterial defeituoso aplicado
GSTFOBJPreservadosimplificadoFlatãoPBR para material básico
GSTFSTLPreservadoPerdidaFlatãoGeometria só
FBXOBJPreservadosimplificadoFlatãoSimplificação Material
FBXSTLPreservadoPerdidaFlatãoGeometria só
FBXGST / GLBPreservadoConvertido em PBRPreservadoBoa fidelidade

Guia de conversão geral

  • Geometria é geralmente preservado em pares de formato, com uma exceção importante: quando exportando para STL, mesas devem consistir inteiramente de faces triângulos. binário ST L silenciosamente truncata quad e n-gon facas para suas primeiras 3 vertices; ASCII STl produz saída malformada para facetas não triángulos .
  • Materiais sobreviver melhor entre glTF e fbx-importações que incluem dados de material. conversão para STL sempre cai materiais. converter para OBJ simplifica os materiais para o modelo MTL básico.
  • A hierarquia da cena é preservado entre os arquivos de formato glTF. OBJ e STL produzem estruturas planas. hierarquia FBX e extração de materiais não são totalmente verificados nesta versão.

Pondo tudo juntos

Aqui está um exemplo completo que carrega um arquivo OBJ, inspecta seus nódulos e exporta para tanto o GLTF quanto o GlB:

import com.aspose.threed.*;

public class FormatWorkflow {
    public static void main(String[] args) throws Exception {
        // Load
        Scene scene = Scene.fromFile("input.obj");

        // Inspect
        System.out.println("Nodes in scene:");
        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("  " + child.getName());
            Transform t = child.getTransform();
            System.out.println("    Translation: "
                + t.getTranslation());
        }

        // Export to glTF with options
        GltfSaveOptions gltfOpts = new GltfSaveOptions();
        gltfOpts.setPrettyPrint(true);
        scene.save("output.gltf", gltfOpts);

        // Export to GLB (binary glTF)
        GltfSaveOptions glbOpts = new GltfSaveOptions();
        glbOpts.setContentType(FileContentType.BINARY);
        scene.save("output.glb", glbOpts);

        System.out.println("Export complete.");
    }
}

Resumo

Aspose.3D FOSS para Java dá-lhe uma API consistente em vários formatos.:

  • OBJ - simples troca de mesas com materiais básicos.
  • STL - Geometria-somente formato para tubos de impressão 3D.
  • GST / GLB - formato PBR-capável para uso da web e em tempo real. GltfSaveOptions com setContentType(FileContentType.BINARY) para a produção do GLB.
  • FBX - importação apenas; formato rico para a carga de activos de motores de jogos e ferramentas DCC.

Use a carga específica de formato e salve as classes opcionais (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptionsQuando você precisa de um controle finamente grão sobre o processo de importação ou exportação.

Para mais detalhes, visite o Apresentação 3D Documental Ou, por exemplo, a fonte em GitHub.