Recursos e Funcionalidades

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:

ClasseDireçãoPropriedades‑chave
ObjLoadOptionsImportarFlipCoordinateSystem, EnableMaterials, Scale
ObjSaveOptionsExportarFlipCoordinateSystem, EnableMaterials, PointCloud
FbxLoadOptionsImportar(configurações padrão)
GltfLoadOptionsImportar(configurações padrão)
GltfSaveOptionsExportar(configurações padrão)
StlLoadOptionsImportar(configurações padrão)
StlSaveOptionsExportar(configurações padrão)
ColladaLoadOptionsImportarFlipCoordinateSystem
ColladaSaveOptionsExportarIndented, TransformStyle
PlyLoadOptionsImportar(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 custom LoadOptions
  • Converter primitives para Mesh com ToMesh() antes de adicionar vertex elements
  • Usar GltfSaveOptions com um .glb extensão para saída binária compacta
  • Verificar node.Entity para null antes 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

ProblemaCausaCorreção
ImportException ao carregarArquivo não suportado ou corrompidoVerifique 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 encontradoColoque o .mtl arquivo ao lado do .obj ou definir ObjLoadOptions.EnableMaterials = true
Incompatibilidade de escala após importação de FBXSistemas de unidades diferentesUsar 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étodoDescrição
SceneContê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
NodeNó da hierarquia de cena que contém entidades e transformações
Node.CreateChildNode()Crie e anexe um nó filho
MeshMalha poligonal com pontos de controle e listas de faces
Mesh.CreatePolygon()Defina uma face poligonal por índices de vértices
Box / Sphere / CylinderPrimitivas paramétricas embutidas
TransformTranslação, rotação e escala locais
FileFormatRegistro e detector de formatos suportados
LambertMaterial / PhongMaterial / PbrMaterialTipos de material para sombreamento
 Português