Caracteristici și Funcționalități

Caracteristici și Funcționalități

Caracteristici și Funcționalități

Această pagină acoperă fiecare domeniu principal de funcționalitate al Aspose.3D 26.1.0 cu exemple C# funcționale.


Încărcarea și Salvarea Scenelor

Scene.Open() încarcă un fișier; Scene.Save() o exportă. Formatul este detectat din extensia fișierului:

using Aspose.ThreeD;

var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");

Folosește fabrica statică Scene.FromFile() ca alternativă:

var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");

Opțiuni specifice formatului

Transmite LoadOptions sau SaveOptions subclase pentru un control detaliat:

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");

Clase de opțiuni disponibile:

ClasăDirecțieProprietăți cheie
ObjLoadOptionsImportFlipCoordinateSystem, EnableMaterials, Scale
ObjSaveOptionsExportFlipCoordinateSystem, EnableMaterials, PointCloud
FbxLoadOptionsImport(setări implicite)
GltfLoadOptionsImport(setări implicite)
GltfSaveOptionsExport(setări implicite)
StlLoadOptionsImport(setări implicite)
StlSaveOptionsExport(setări implicite)
ColladaLoadOptionsImportFlipCoordinateSystem
ColladaSaveOptionsExportIndented, TransformStyle
PlyLoadOptionsImport(setări implicite)

Construirea unui graf de scenă

Creează noduri și atașează entități pentru a construi o ierarhie:

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));

Accesați copiii prin node.ChildNodes și entitatea atașată prin node.Entity.


Mesh și primitive

Creează un Mesh programatic cu puncte de control și poligoane:

// 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);

Primitive încorporate (Box, Sphere, Cylinder) pot fi convertite în Mesh:

var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();

Elemente de vârf

Atașează normale, UV-uri și culori de vârf la geometrie:

var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);

Tipuri de elemente de vertex disponibile: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.


Transformări

Fiecare Node poartă un Transform cu Translation, Rotation, și 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);

Citește poziția în spațiul lumii prin node.GlobalTransform.Matrix sau node.EvaluateGlobalTransform().


Materiale

Atribuie materiale nodurilor pentru date de umbrire:

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);

Tipuri de material: LambertMaterial, PhongMaterial, PbrMaterial.


Sfaturi și bune practici

  • Utilizați Scene.FromFile() pentru încărcare pe o singură linie când nu ai nevoie de personalizare LoadOptions
  • Convertește primitivele în Mesh cu ToMesh() înainte de a adăuga elemente vertex
  • Folosește GltfSaveOptions cu un .glb extensie pentru ieșire binară compactă
  • Verifică node.Entity pentru null înainte de a converti — nu fiecare nod conține geometrie
  • Folosește PolygonModifier.Triangulate() pentru a converti plasele quad înainte de export către formate doar cu triunghiuri, cum ar fi STL

Probleme comune

ProblemăCauzăRemediere
ImportException la încărcareFișier nesuportat sau coruptVerificați că fișierul se deschide într-un vizualizator 3D; verificați că formatul se află în lista de formate suportate
Materiale lipsă după încărcarea OBJ.mtl fișierul nu a fost găsitPlasați .mtl fișier lângă .obj sau setați ObjLoadOptions.EnableMaterials = true
Neconcordanță a scării după importul FBXSisteme de unități diferiteFolosiți ObjLoadOptions.Scale sau aplicați un Transform după încărcare

FAQ

Cum pot detecta formatul unui fișier necunoscut?

Folosiți FileFormat.Detect():

var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);

Pot încărca dintr-un flux în loc de o cale de fișier?

Da. Scene.Open() acceptă un Stream:

using var stream = File.OpenRead("model.glb");
scene.Open(stream);

Ce formate suportă atât importul, cât și exportul?

OBJ, STL, glTF/GLB, FBX, COLLADA și 3MF suportă ambele direcții. PLY suportă doar importul (exportatorul PLY nu este implementat).


Rezumat al referinței API

Clasă / MetodăDescriere
SceneContainer de scenă 3D de nivel superior
Scene.Open()Încarcă un fișier 3D prin cale sau flux
Scene.Save()Exportă scena în fișier sau flux
Scene.FromFile()Fabrică statică pentru a încărca și returna un Scene
NodeNod al ierarhiei scenei care conține entități și transformări
Node.CreateChildNode()Creează și atașează un nod copil
MeshPlasă poligonală cu puncte de control și liste de fețe
Mesh.CreatePolygon()Definește o față poligonală prin indici de vârf
Box / Sphere / CylinderPrimitive parametrice încorporate
TransformTranslație, rotație și scară locale
FileFormatRegistru și detector pentru formatele suportate
LambertMaterial / PhongMaterial / PbrMaterialTipuri de material pentru umbrire
 Română