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
| Formato | Extensão | Leia | Escreva |
|---|---|---|---|
| FBX (ASCII e Binário, 6.x-7.x) | .fbx | Sim | Não |
| GST 1.0 / 2.0 | .gltf | Sim | Sim |
| GSTB Binário | .glb | Sim | Sim |
| Avaliação OBJ | .obj | Sim | Sim |
| STL (ASCII e Binário) | .stl | Sim | Sim |
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
- Guia de Desenvolvimento - Açoite de caminhos e Usos de padrões
- Base de conhecimento Como fazer artigos e FAQs
- Referência de API - A classe completa e Documentos de Método