Introdução

Trabalhar com conteúdo 3D em Java geralmente requer escolha entre peso pesado motores de jogos e bibliotecas de matemática de bar-bones. aspose-3d-foss O pacote oferece a terreno médio: uma API focada de cenário-graf que gerencia arquivos I/O, hierarquias de nódulos, construção de mesh, e coordena transformações sem atrair em um rendering uma cadeia de dependência ou um tubo.

Aspose.3D FOSS para Java é uma biblioteca de código aberto distribuída sob a licença MIT. Ele fornece 80 classes que abrangem gestão da cena, geometria, materiais e conversão de formato. A biblioteca lê FBX, glTF/GLB, Wavefront OBJ e STL, e escreve gltF / GLB , OBG e StL (exportação do FBX não é implementada), tornando-a prática para processamento 3D ao lado do servidor, integrações de ferramentas construídas e tubos de conversões de dados que funcionam em Java 21 ou mais tarde.

Este post passa pelas capacidades de gestão da cena na biblioteca: como construir uma cena a partir do escudo, populá-la com geometria e transformações, e exportar o resultado para o disco.


O que está incluído

Apresentação de Graph Basics

O que Scene A classe é o recipiente de raiz para cada documento 3D. Node, metadados de ativos, clips de animação e sub-escenas. você pode criar um vazio A cena e, em seguida, populá-la ou carregar um arquivo existente com Scene.fromFile.

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

Scene scene = new Scene();
Node root = scene.getRootNode();

// Add named child nodes to build a hierarchy
Node chassis = root.createChildNode("Chassis");
Node wheel = chassis.createChildNode("FrontLeftWheel");

Cada um Node Pode manter uma Entity (como a Mesh ou Camera) a) Transform, uma lista de materiais, e outros nodos da criança. estrutura da árvore espelho o padrão de cenário-grafia usado pela maioria das ferramentas 3D de escrita.

Mesh Construção

O que Mesh A classe permite definir a geometria dos pontos de controle e poligona. Indicações. você adiciona vertices com addControlPoint,Depois, ligue-os em faces. com createPolygon.

import com.aspose.threed.Mesh;

Mesh box = new Mesh("Box");

// Define eight corners of a cube
box.addControlPoint(0, 0, 0);
box.addControlPoint(1, 0, 0);
box.addControlPoint(1, 1, 0);
box.addControlPoint(0, 1, 0);
box.addControlPoint(0, 0, 1);
box.addControlPoint(1, 0, 1);
box.addControlPoint(1, 1, 1);
box.addControlPoint(0, 1, 1);

// Create quad faces
box.createPolygon(0, 1, 2, 3); // back
box.createPolygon(4, 5, 6, 7); // front
box.createPolygon(0, 4, 7, 3); // left
box.createPolygon(1, 5, 6, 2); // right
box.createPolygon(3, 2, 6, 7); // top
box.createPolygon(0, 1, 5, 4); // bottom

scene.getRootNode().createChildNode("Box", box);

A API de Mesh inclui triangulate(), optimize(removeVertices),e Boolean Operações (union, difference, intersect( ) mas esses métodos são estúpidos em A versão atual – eles retornam um clone da mesha de entrada sem executar A chamada operação.

Transformar e posicionar

Cada um Node Carregando a Transform que controla sua tradução local, rotação, Estes compõem através da hierarquia para que se mova um nodo parental. movimenta todos os seus filhos.

import com.aspose.threed.Transform;
import com.aspose.threed.Node;

Node node = scene.getRootNode().createChildNode("Shifted");
Transform t = node.getTransform();
t.setTranslation(5.0, 0.0, -3.0);
t.setScale(2.0, 2.0, 2.0);
t.setEulerAngles(0, 45.0, 0);

Para perguntas de posicionamento absoluto, ligue para node.getGlobalTransform() Para recuperar O Composto GlobalTransform,ou node.evaluateGlobalTransform(true) Para obter a Matrix4 Isso inclui as offset geométricas.

PBR Materiais

O que PbrMaterial A classe fornece propriedades de renderização fisicamente baseadas: A cor albedo, o fator metálico, a rigidez, as cores emissivas e a transparência. Assine um material para um nodo quando você cria a criança.

import com.aspose.threed.PbrMaterial;
import com.aspose.threed.Vector4;
import com.aspose.threed.Vector3;

PbrMaterial mat = new PbrMaterial("RedMetal");
mat.setAlbedo(new Vector4(0.9, 0.1, 0.1, 1.0));
mat.setMetallicFactor(0.8);
mat.setRoughnessFactor(0.3);
mat.setEmissiveColor(new Vector3(0, 0, 0));

scene.getRootNode().createChildNode("Part", box, mat);

Detecção de formato

O que FileFormat A classe fornece utilidades de busca estática e detecção. você pode Resolva um formato por extensão de arquivo ou procure uma corrente para identificar ficheiros desconhecidos.

import com.aspose.threed.FileFormat;

FileFormat fmt = FileFormat.getFormatByExtension("model.glb");
boolean canRead  = fmt.getCanImport();
boolean canWrite = fmt.getCanExport();

Coordenado de conversão

AxisSystem permitem-lhe definir o eixo, a frente e a manutenção de um A coordenada é a, e o sistema conta uma Matrix4 transformando a geometria entre os convenções (por exemplo, de um sistema Z-up à direita para um Y-Up) Uma mão esquerda).

import com.aspose.threed.AxisSystem;
import com.aspose.threed.Axis;
import com.aspose.threed.CoordinateSystem;
import com.aspose.threed.Matrix4;

AxisSystem source = new AxisSystem(
    CoordinateSystem.RIGHT_HANDED, Axis.Z_AXIS, Axis.Y_AXIS);
AxisSystem target = new AxisSystem(
    CoordinateSystem.LEFT_HANDED, Axis.Y_AXIS, Axis.Z_AXIS);
Matrix4 conversion = source.transformTo(target);

Início rápido

Adicione a dependência de Maven:

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

Construa uma cena simples e exportá-la:

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

Scene scene = new Scene();
Mesh mesh = new Mesh("Triangle");
mesh.addControlPoint(0, 0, 0);
mesh.addControlPoint(1, 0, 0);
mesh.addControlPoint(0, 1, 0);
mesh.createPolygon(0, 1, 2);

scene.getRootNode().createChildNode("Shape", mesh);

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

Formatos suportados

FormatoExtensãoLeiaEscreva
FBX (ASCII e Binário, 6.x-7.x).fbxSimNão
GST 1.0 / 2.0.gltfSimSim
GSTB Binário.glbSimSim
Avaliação OBJ.objSimSim
STL (ASCII e Binário).stlSimSim

Cada formato tem sido dedicado LoadOptions e SaveOptions Subclassificação (para Um exemplo, FbxLoadOptions, GltfSaveOptions, StlSaveOptionsque exponha configurações específicas de formato, como o coordenado-sistema e o tipo de conteúdo Seleção .


Open Source e Licença

Aspose.3D FOSS para Java é lançado sob a licença MIT. Disponível no GitHub em Aspose.3D-FOSS para Java. Você pode usar, modificar e redistribuir a biblioteca em forma comercial e Projetos não comerciais sem restrições.


Começando com