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ție | Proprietăți cheie |
|---|---|---|
ObjLoadOptions | Import | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Export | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Import | (setări implicite) |
GltfLoadOptions | Import | (setări implicite) |
GltfSaveOptions | Export | (setări implicite) |
StlLoadOptions | Import | (setări implicite) |
StlSaveOptions | Export | (setări implicite) |
ColladaLoadOptions | Import | FlipCoordinateSystem |
ColladaSaveOptions | Export | Indented, TransformStyle |
PlyLoadOptions | Import | (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 personalizareLoadOptions - Convertește primitivele în
MeshcuToMesh()înainte de a adăuga elemente vertex - Folosește
GltfSaveOptionscu un.glbextensie pentru ieșire binară compactă - Verifică
node.Entitypentrunullî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ărcare | Fișier nesuportat sau corupt | Verificaț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ăsit | Plasați .mtl fișier lângă .obj sau setați ObjLoadOptions.EnableMaterials = true |
| Neconcordanță a scării după importul FBX | Sisteme de unități diferite | Folosiț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 |
|---|---|
Scene | Container 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 |
Node | Nod al ierarhiei scenei care conține entități și transformări |
Node.CreateChildNode() | Creează și atașează un nod copil |
Mesh | Plasă poligonală cu puncte de control și liste de fețe |
Mesh.CreatePolygon() | Definește o față poligonală prin indici de vârf |
Box / Sphere / Cylinder | Primitive parametrice încorporate |
Transform | Translație, rotație și scară locale |
FileFormat | Registru și detector pentru formatele suportate |
LambertMaterial / PhongMaterial / PbrMaterial | Tipuri de material pentru umbrire |