Estamos entusiasmados em anunciar a disponibilidade de Aspose.3D FOSS for Java – uma biblioteca gratuita e de código aberto para trabalhar com formatos de arquivos 3D em aplicações Java. Construída como uma solução Java pura sem dependências nativas, a biblioteca funciona no Java 21 e posteriores, tornando-a acessível a uma ampla variedade de projetos e ambientes.

Este post apresenta o que a biblioteca oferece, como começar e para onde ir a partir daqui.

O que é Aspose.3D FOSS para Java?

Aspose.3D FOSS for Java é uma biblioteca leve de processamento de arquivos 3D publicada sob a licença MIT. Ela fornece uma API de grafo de cena que permite carregar, inspecionar, transformar e salvar modelos 3D em vários formatos amplamente usados. A biblioteca é totalmente escrita em Java e não requer binários nativos externos ou configurações específicas de plataforma.

O código-fonte está disponível no GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Principais Destaques

  • Puro Java – sem JNI, sem bibliotecas nativas, sem restrições de plataforma.
  • Java 21+ compatível.
  • licenciado sob a licença MIT – use-o em projetos pessoais, comerciais ou proprietários sem restrições.
  • Arquitetura de grafo de cena – uma árvore familiar de nós, malhas, câmeras e materiais.
  • Suporte a múltiplos formatos – ler e gravar arquivos OBJ, STL, glTF 2.0 e GLB; ler arquivos FBX.

Início Rápido

Instalação do Maven

Adicione a seguinte dependência ao seu pom.xml:

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

Sua Primeira Conversão

O caso de uso mais simples é carregar um arquivo 3D em um formato e salvá‑lo em outro. Aqui está uma conversão de duas linhas de OBJ para STL:

import com.aspose.threed.*;

public class QuickConvert {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("cube.obj");
        scene.save("output.stl");
    }
}

O Scene classe é o ponto de entrada central. Chame Scene.fromFile() com um caminho de arquivo para carregar um modelo, então chame save() com o caminho de destino. A biblioteca infere o formato a partir da extensão do arquivo.

Construindo uma Cena do Zero

Você também pode construir cenas programaticamente:

import com.aspose.threed.*;

public class BuildScene {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();
        Node node = scene.getRootNode().createChildNode("Box");

        Transform t = node.getTransform();
        t.setTranslation(1, 2, 3);

        scene.save("scene.gltf");
    }
}

Isso cria uma nova cena, adiciona um nó filho chamado “Box” sob a raiz, posiciona‑o nas coordenadas (1, 2, 3) e exporta o resultado como um arquivo glTF.

Carregando com Opções Específicas de Formato

Quando você precisa de um controle mais fino sobre o processo de carregamento, cada formato fornece uma classe de opções dedicada. Por exemplo, carregando um arquivo STL com opções explícitas:

import com.aspose.threed.*;

public class LoadWithOptions {
    public static void main(String[] args) throws Exception {
        StlLoadOptions opts = new StlLoadOptions();
        Scene scene = Scene.fromFile("part.stl", opts);

        // Inspect the loaded scene
        System.out.println("Root children: "
            + scene.getRootNode().getChildNodes().size());

        // Re-export as OBJ
        scene.save("part.obj");
    }
}

O Scene.fromFile() O método estático aceita qualquer um dos tipos de opção de carregamento: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, ou FbxLoadOptions.

Percorrendo o Grafo da Cena

Depois que uma cena é carregada, você pode percorrer a árvore de nós para inspecionar ou modificar seu conteúdo:

import com.aspose.threed.*;

public class TraverseScene {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("model.gltf");

        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("Node: " + child.getName());

            Transform t = child.getTransform();
            System.out.println("  Translation: " + t.getTranslation());

            Entity entity = child.getEntity();
            if (entity instanceof Mesh) {
                Mesh mesh = (Mesh) entity;
                System.out.println("  Vertices: "
                    + mesh.getControlPoints().size());
            }
        }
    }
}

Esse padrão é útil para depuração, geração de relatórios sobre o conteúdo do modelo ou modificação seletiva de partes de uma cena antes de reexportar.

Aplicando Transformações

O posicionamento de nós no espaço 3D é feito através do Transform objeto em cada Node:

import com.aspose.threed.*;

public class TransformExample {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();

        Node parent = scene.getRootNode().createChildNode("Parent");
        parent.getTransform().setTranslation(10, 0, 0);

        Node child = parent.createChildNode("Child");
        child.getTransform().setTranslation(5, 0, 0);
        child.getTransform().setScale(2, 2, 2);

        // Child's world position is (15, 0, 0) due to
        // parent-child transform inheritance

        scene.save("transformed.gltf");
    }
}

As transformações seguem o modelo padrão de herança pai‑filho: a posição em espaço mundial de um filho é a combinação de sua transformação local e de todas as transformações dos ancestrais até a raiz.

O que está incluído

A biblioteca vem com um conjunto focado de recursos projetados em torno do modelo de grafo de cena 3D.

Grafo de Cena

O grafo de cena é a espinha dorsal da API. Cada arquivo 3D é representado como uma estrutura em árvore:

ClasseFunção
SceneContêiner de nível superior; a raiz do grafo de cena
NodeUma posição nomeada na árvore; contém transformações e nós filhos
EntityBase abstrata para objetos visuais anexados a nós
MeshGeometria poligonal – vértices, faces, normais
CameraDefinição de câmera virtual
TransformTranslação, rotação e escala locais de um nó
GlobalTransformTransformação no espaço mundial calculada

Materiais

A biblioteca fornece um modelo de material PBR (Physically Based Rendering):

  • PbrMaterial – material de renderização baseada em física com albedo, metalness, roughness, cor emissiva e transparência. Esta é a única classe de material concreta disponível na edição Java.

Utilitários Matemáticos

O com.aspose.threed pacote inclui primitivas matemáticas essenciais:

  • Vector3 – vetor de 3 componentes para posições, direções e cores.
  • Matrix4 – matriz de transformação 4x4.
  • Quaternion – representação de rotação.
  • BoundingBox – caixa delimitadora alinhada ao eixo para consultas espaciais.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Opções de Carregamento e Salvamento

Cada formato possui classes de opções dedicadas que permitem controlar o comportamento de importação e exportação:

FormatoOpções de CarregamentoOpções de Salvamento
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (apenas importação)

Por exemplo, para exportar glTF com JSON formatado de forma legível e um sistema de coordenadas invertido:

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

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

Formatos Suportados

A tabela a seguir resume os formatos que Aspose.3D FOSS para Java pode ler e gravar.

FormatoExtensãoImportarExportarNotas
OBJ.objSimSimCom materiais MTL
STL.stlSimSimBinário + ASCII
glTF 2.0.gltfSimSimFormato JSON
GLB.glbSimSimglTF binário via GltfSaveOptions
FBX.fbxSimNãoSomente importação

OBJ, STL, glTF e GLB suportam tanto carregamento quanto gravação. FBX é suportado apenas para importação.

Guia de Seleção de Formato

Escolher o formato correto depende do seu caso de uso:

  • OBJ é ideal quando você precisa da máxima compatibilidade entre ferramentas 3D. Quase todo aplicativo de modelagem pode ler e gravar OBJ. Funciona bem para a troca de dados de malha, mas transporta apenas informações básicas de material por meio de arquivos MTL complementares.
  • STL é o formato preferido para fluxos de trabalho de impressão 3D. Ele armazena geometria triangulada bruta sem materiais ou hierarquia de cena, que é exatamente o que o software de fatiamento espera. Se o seu pipeline termina em uma impressora 3D, STL é a escolha mais direta.
  • glTF é o padrão moderno para web e 3D em tempo real. Ele suporta materiais PBR, hierarquias completas de cena e foi projetado para transmissão eficiente. Use glTF ao criar visualizadores baseados na web, trabalhar com three.js ou Babylon.js, ou direcionar qualquer pipeline de renderização em tempo real.
  • FBX está profundamente integrado aos fluxos de trabalho de desenvolvimento de jogos e criação de conteúdo digital. Ele suporta dados de cena ricos, incluindo hierarquias e materiais. Aspose. 3D FOSS for Java suporta FBX apenas importação – use-o para carregar ativos FBX e convertê-los para outros formatos.

Limitações Conhecidas

É importante notar que Scene.render() é não suportado na edição FOSS. Chamar este método lançará um UnsupportedOperationException. A biblioteca foi projetada para processamento 3D baseado em arquivos – carregamento, manipulação, transformação e salvamento de modelos – em vez de renderização em tempo real para um display.

Código Aberto e Licenciamento

Aspose.3D FOSS for Java é lançado sob a MIT License. Isso significa que você está livre para:

  • Usar a biblioteca em aplicações comerciais e proprietárias.
  • Modificar o código-fonte para atender às suas necessidades.
  • Distribua a biblioteca como parte do seu próprio software.

Não há taxas de royalties, limites de uso ou requisitos de atribuição além do que a licença MIT especifica.

O código-fonte completo está hospedado no GitHub, e contribuições são bem-vindas: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Requisitos do Sistema

RequisitoDetalhe
Java versão21 or later
DependênciasNenhum (puro Java)
PlataformasQualquer plataforma que execute uma JVM
Ferramenta de buildMaven (recomendado)

Começando

Aqui estão os recursos para ajudá-lo a começar:

  • Documentação – guias abrangentes e tutoriais de API estão disponíveis no Aspose.3D site de documentação.
  • Base de Conhecimento – artigos práticos de como‑fazer e dicas de solução de problemas na Aspose.3D KB.
  • Referência da API – referência detalhada de classes e métodos no Aspose.3D Referência da API.
  • Código-fonte – navegue e contribua em GitHub.
  • Maven Central – o pacote é publicado como com.aspose:aspose-3d-foss no Maven Central.

Casos de Uso Comuns

Aqui estão alguns cenários práticos onde Aspose.3D FOSS para Java se encaixa bem:

Pipelines de Conversão de Formato

Muitas equipes recebem ativos 3D em um formato, mas precisam deles em outro. Uma equipe de design pode trabalhar em FBX enquanto a equipe web precisa de glTF. A biblioteca permite que você crie pipelines de conversão automatizados:

// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");

GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);

scene.save("asset.glb", opts);

3D Model Inspection and Validation

Antes de integrar um ativo 3D em sua aplicação, você pode querer validar seu conteúdo – verificando a contagem de nós, confirmando a geometria ou assegurando que os elementos esperados estejam presentes:

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

int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);

for (Node child : scene.getRootNode().getChildNodes()) {
    if (child.getEntity() instanceof Mesh) {
        Mesh mesh = (Mesh) child.getEntity();
        System.out.println(child.getName() + ": "
            + mesh.getControlPoints().size() + " vertices");
    }
}

Montagem da Cena

Você pode carregar vários modelos e combiná-los em uma única cena:

Scene scene = new Scene();

Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");

// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}

scene.save("assembled.gltf");

Próximos passos

Nos próximos posts, abordaremos:

  • Uma análise aprofundada dos recursos principais da API de grafo de cena, materiais e utilitários matemáticos.
  • Um guia prático para trabalhar com cada formato 3D suportado – OBJ, STL, glTF e FBX – incluindo opções de carregamento/salvamento e padrões de conversão em lote.

Fique ligado, e sinta-se à vontade para explorar a biblioteca e compartilhar seu feedback no GitHub.