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.
| Formato | Extensão | Importação | Exportação | Apoio material | A hierarquia do cenário |
|---|---|---|---|---|---|
| OBJ | .obj | Sim | Sim | Ficheiros de base (MTL) | Flat |
| STL | .stl | Sim | Sim | Nenhuma | Flat |
| GST 2.0 | .gltf | Sim | Sim | PBR | Completos |
| GLB | .glb | Sim | Sim | PBR | Completos |
| FBX | .fbx | Sim | Não | Rico | Completos |
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étodo | Objetivo |
|---|---|
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.
| de | Para o | Geometria | Materiais | Hierarquia | Notas |
|---|---|---|---|---|---|
| OBJ | STL | Preservado | Perdida | N/A | A STL não tem suporte material |
| OBJ | GST / GLB | Preservado | Convertido em PBR | Flat | Materiais de MTL mapeados onde possível |
| STL | OBJ | Preservado | Nenhuma | N/A | Não há material na fonte |
| STL | GST / GLB | Preservado | Definição | Flat | Material defeituoso aplicado |
| GSTF | OBJ | Preservado | simplificado | Flatão | PBR para material básico |
| GSTF | STL | Preservado | Perdida | Flatão | Geometria só |
| FBX | OBJ | Preservado | simplificado | Flatão | Simplificação Material |
| FBX | STL | Preservado | Perdida | Flatão | Geometria só |
| FBX | GST / GLB | Preservado | Convertido em PBR | Preservado | Boa 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.
GltfSaveOptionscomsetContentType(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.