Recursos e Funcionalidades
Recursos e Funcionalidades
Esta página cobre todas as principais áreas de recurso de Aspose.3D 26.1.0 com exemplos C# funcionais.
Carregando e Salvando Cenas
Scene.Open() carrega um arquivo; Scene.Save() exporta‑o. O formato é detectado a partir da extensão do arquivo:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");Use a fábrica estática Scene.FromFile() como alternativa:
var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");Opções Específicas de Formato
Passe LoadOptions ou SaveOptions subclasses para controle refinado:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");Classes de opções disponíveis:
| Classe | Direção | Propriedades‑chave |
|---|---|---|
ObjLoadOptions | Importar | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Exportar | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Importar | (configurações padrão) |
GltfLoadOptions | Importar | (configurações padrão) |
GltfSaveOptions | Exportar | (configurações padrão) |
StlLoadOptions | Importar | (configurações padrão) |
StlSaveOptions | Exportar | (configurações padrão) |
ColladaLoadOptions | Importar | FlipCoordinateSystem |
ColladaSaveOptions | Exportar | Indented, TransformStyle |
PlyLoadOptions | Importar | (configurações padrão) |
Construindo um Grafo de Cena
Crie nós e anexe entidades para construir uma hierarquia:
var scene = new Scene();
var root = scene.RootNode;
var boxNode = root.CreateChildNode("box", new Box(5, 5, 5));
var sphereNode = root.CreateChildNode("sphere", new Sphere(3));Acessar filhos via node.ChildNodes e a entidade anexada via node.Entity.
Malha e Primitivas
Criar um Mesh programaticamente com pontos de controle e polígonos:
// Mesh.ControlPoints uses Aspose.ThreeD.Utilities.Vector4
// (double-precision, lowercase fields: x, y, z, w)
using Aspose.ThreeD.Utilities;
var mesh = new Mesh("custom");
mesh.ControlPoints.Add(new Vector4(0.0, 0.0, 0.0)); // w defaults to 1.0
mesh.ControlPoints.Add(new Vector4(10.0, 0.0, 0.0));
mesh.ControlPoints.Add(new Vector4(10.0, 10.0, 0.0));
mesh.ControlPoints.Add(new Vector4(0.0, 10.0, 0.0));
mesh.CreatePolygon(0, 1, 2, 3);Primitivas embutidas (Box, Sphere, Cylinder) podem ser convertidas para Mesh:
var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();Elementos de Vértice
Anexe normais, UVs e cores de vértice à geometria:
var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);Tipos de elemento de vértice disponíveis: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.
Transformações
Cada Node contém um Transform com Translation, Rotation, e Scale:
var node = scene.RootNode.CreateChildNode("moved", new Box());
node.Transform.Translation = new FVector3(10, 0, 5);
node.Transform.Scale = new FVector3(2, 2, 2);Leia a posição no espaço mundial via node.GlobalTransform.Matrix ou node.EvaluateGlobalTransform().
Materiais
Atribua materiais aos nós para dados de sombreamento:
var mat = new PhongMaterial("shiny");
mat.Diffuse = new Vector4(0.8, 0.2, 0.2, 1.0);
mat.Specular = new Vector4(1, 1, 1, 1);
mat.Shininess = 32;
scene.RootNode.CreateChildNode("red_box", new Box(), mat);Tipos de material: LambertMaterial, PhongMaterial, PbrMaterial.
Dicas e Melhores Práticas
- Use
Scene.FromFile()para carregamento de uma linha quando você não precisa de customLoadOptions - Converter primitives para
MeshcomToMesh()antes de adicionar vertex elements - Usar
GltfSaveOptionscom um.glbextensão para saída binária compacta - Verificar
node.Entityparanullantes de casting — nem todo nó contém geometria - Usar
PolygonModifier.Triangulate()para converter malhas quad antes da exportação para formatos apenas de triângulos como STL
Problemas Comuns
| Problema | Causa | Correção |
|---|---|---|
ImportException ao carregar | Arquivo não suportado ou corrompido | Verifique se o arquivo abre em um visualizador 3D; verifique se o formato está na lista de suportados |
| Materiais ausentes após o carregamento de OBJ | .mtl arquivo não encontrado | Coloque o .mtl arquivo ao lado do .obj ou definir ObjLoadOptions.EnableMaterials = true |
| Incompatibilidade de escala após importação de FBX | Sistemas de unidades diferentes | Usar ObjLoadOptions.Scale ou aplicar um Transform após o carregamento |
FAQ
Como detecto o formato de um arquivo desconhecido?
Usar FileFormat.Detect():
var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);Posso carregar a partir de um stream em vez de um caminho de arquivo?
Sim. Scene.Open() aceita um Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Quais formatos suportam importação e exportação?
OBJ, STL, glTF/GLB, FBX, COLLADA e 3MF suportam ambas as direções. PLY suporta apenas importação (o exportador PLY não está implementado).
Resumo da Referência da API
| Classe / Método | Descrição |
|---|---|
Scene | Contêiner de cena 3D de nível superior |
Scene.Open() | Carregue um arquivo 3D por caminho ou fluxo |
Scene.Save() | Exporte a cena para arquivo ou fluxo |
Scene.FromFile() | Fábrica estática para carregar e retornar um Scene |
Node | Nó da hierarquia de cena que contém entidades e transformações |
Node.CreateChildNode() | Crie e anexe um nó filho |
Mesh | Malha poligonal com pontos de controle e listas de faces |
Mesh.CreatePolygon() | Defina uma face poligonal por índices de vértices |
Box / Sphere / Cylinder | Primitivas paramétricas embutidas |
Transform | Translação, rotação e escala locais |
FileFormat | Registro e detector de formatos suportados |
LambertMaterial / PhongMaterial / PbrMaterial | Tipos de material para sombreamento |