Características y Funcionalidades
Características y Funcionalidades
Esta página cubre cada área principal de características de Aspose.3D 26.1.0 con ejemplos funcionales de C#.
Cargar y Guardar Escenas
Scene.Open() carga un archivo; Scene.Save() lo exporta. El formato se detecta a partir de la extensión del archivo:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");Utilice la fábrica estática Scene.FromFile() como alternativa:
var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");Opciones específicas del formato
Pase LoadOptions o SaveOptions subclases para un control granular:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");Clases de opciones disponibles:
| Clase | Dirección | Propiedades clave |
|---|---|---|
ObjLoadOptions | Importar | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Exportar | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Importar | (configuración predeterminada) |
GltfLoadOptions | Importar | (configuración predeterminada) |
GltfSaveOptions | Exportar | (configuración predeterminada) |
StlLoadOptions | Importar | (configuración predeterminada) |
StlSaveOptions | Exportar | (configuración predeterminada) |
ColladaLoadOptions | Importar | FlipCoordinateSystem |
ColladaSaveOptions | Exportar | Indented, TransformStyle |
PlyLoadOptions | Importar | (configuración predeterminada) |
Construir un grafo de escena
Crea nodos y adjunta entidades para construir una jerarquía:
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));Acceder a los hijos mediante node.ChildNodes y la entidad adjunta mediante node.Entity.
Malla y Primitivas
Crear un Mesh programáticamente con puntos de control y 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 incorporadas (Box, Sphere, Cylinder) pueden convertirse en Mesh:
var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();Elementos de Vértice
Adjunta normales, UVs y colores de vértice a la geometría:
var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);Tipos de elementos de vértice disponibles: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.
Transformaciones
Cada Node lleva un Transform con Translation, Rotation, y 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);Leer posición en espacio mundial mediante node.GlobalTransform.Matrix o node.EvaluateGlobalTransform().
Materiales
Asigna materiales a los nodos para los datos de sombreado:
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.
Consejos y mejores prácticas
- Usar
Scene.FromFile()para una carga de una sola línea cuando no necesitas personalizarLoadOptions - Convertir primitivas a
MeshconToMesh()antes de agregar elementos de vértice - Usar
GltfSaveOptionscon un.glbextensión para salida binaria compacta - Verificar
node.Entityparanullantes de convertir — no todos los nodos contienen geometría - Usar
PolygonModifier.Triangulate()para convertir mallas cuádricas antes de exportar a formatos solo de triángulos como STL
Problemas comunes
| Problema | Causa | Solución |
|---|---|---|
ImportException al cargar | Archivo no compatible o corrupto | Verifique que el archivo se abra en un visor 3D; compruebe que el formato esté en la lista de compatibles |
| Materiales faltantes después de cargar OBJ | .mtl archivo no encontrado | Coloque el .mtl archivo junto al .obj o establecer ObjLoadOptions.EnableMaterials = true |
| Desajuste de escala después de la importación de FBX | Sistemas de unidades diferentes | Usar ObjLoadOptions.Scale o aplicar una Transform después de cargar |
FAQ
¿Cómo detecto el formato de un archivo desconocido?
Usar FileFormat.Detect():
var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);¿Puedo cargar desde un flujo en lugar de una ruta de archivo?
Sí. Scene.Open() acepta un Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);¿Qué formatos admiten tanto importación como exportación?
OBJ, STL, glTF/GLB, FBX, COLLADA y 3MF admiten ambas direcciones. PLY solo admite importación (el exportador PLY no está conectado).
Resumen de la Referencia de API
| Clase / Método | Descripción |
|---|---|
Scene | Contenedor de escena 3D de nivel superior |
Scene.Open() | Cargar un archivo 3D por ruta o flujo |
Scene.Save() | Exportar escena a archivo o flujo |
Scene.FromFile() | Fábrica estática para cargar y devolver un Scene |
Node | Nodo de jerarquía de escena que contiene entidades y transformaciones |
Node.CreateChildNode() | Crear y adjuntar un nodo hijo |
Mesh | Malla poligonal con puntos de control y listas de caras |
Mesh.CreatePolygon() | Definir una cara poligonal por índices de vértices |
Box / Sphere / Cylinder | Primitivas paramétricas incorporadas |
Transform | Traslación, rotación y escala locales |
FileFormat | Registro y detector de formatos compatibles |
LambertMaterial / PhongMaterial / PbrMaterial | Tipos de material para sombreado |