Funktionen und Merkmale

Funktionen und Merkmale

Diese Seite deckt jeden wichtigen Funktionsbereich von Aspose.3D 26.1.0 mit funktionierenden C#-Beispielen.


Laden und Speichern von Szenen

Scene.Open() lädt eine Datei; Scene.Save() exportiert sie. Das Format wird anhand der Dateierweiterung erkannt:

using Aspose.ThreeD;

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

Verwenden Sie die statische Fabrik Scene.FromFile() als Alternative:

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

Formatbezogene Optionen

Übergeben Sie LoadOptions oder SaveOptions Unterklassen für feinkörnige Kontrolle:

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

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

Verfügbare Optionsklassen:

KlasseRichtungSchlüsseleigenschaften
ObjLoadOptionsImportFlipCoordinateSystem, EnableMaterials, Scale
ObjSaveOptionsExportFlipCoordinateSystem, EnableMaterials, PointCloud
FbxLoadOptionsImport(Standard‑Einstellungen)
GltfLoadOptionsImport(Standard‑Einstellungen)
GltfSaveOptionsExport(Standard‑Einstellungen)
StlLoadOptionsImport(Standard‑Einstellungen)
StlSaveOptionsExport(Standard‑Einstellungen)
ColladaLoadOptionsImportFlipCoordinateSystem
ColladaSaveOptionsExportIndented, TransformStyle
PlyLoadOptionsImport(Standard‑Einstellungen)

Erstellen eines Szenengraphen

Erstellen Sie Knoten und hängen Sie Entitäten an, um eine Hierarchie aufzubauen:

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

Zugriff auf Kinder über node.ChildNodes und die zugehörige Entität über node.Entity.


Mesh und Primitive

Erstelle ein Mesh programmgesteuert mit Kontrollpunkten und Polygonen:

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

Eingebaute Primitive (Box, Sphere, Cylinder) können konvertiert werden zu Mesh:

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

Vertex-Elemente

Fügen Sie Normalen, UVs und Vertex-Farben zur Geometrie hinzu:

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

Verfügbare Vertex-Elementtypen: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.


Transformationen

Jedes Node trägt ein Transform mit Translation, Rotation, und 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);

Lese Welt-Raum-Position über node.GlobalTransform.Matrix oder node.EvaluateGlobalTransform().


Materialien

Weisen Sie Knoten Materialien zu, um Shading-Daten zu erhalten:

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

Materialtypen: LambertMaterial, PhongMaterial, PbrMaterial.


Tipps und bewährte Verfahren

  • Verwenden Scene.FromFile() für einzeiligen Ladevorgang, wenn Sie keine benutzerdefinierte Lösung benötigen LoadOptions
  • Primitive konvertieren zu Mesh mit ToMesh() vor dem Hinzufügen von Vertex-Elementen
  • Verwenden GltfSaveOptions mit einem .glb Erweiterung für kompakte Binärausgabe
  • Prüfen node.Entity für null vor dem Casting — nicht jeder Knoten enthält Geometrie
  • Verwenden PolygonModifier.Triangulate() um Quad-Meshes vor dem Export in ausschließlich Dreiecksformate wie STL zu konvertieren

Häufige Probleme

ProblemUrsacheLösung
ImportException beim LadenNicht unterstützte oder beschädigte DateiStellen Sie sicher, dass die Datei in einem 3D‑Betrachter geöffnet wird; prüfen Sie, ob das Format in der unterstützten Liste steht
Fehlende Materialien nach dem Laden von OBJ.mtl Datei nicht gefundenPlatzieren Sie die .mtl Datei neben dem .obj oder setzen ObjLoadOptions.EnableMaterials = true
Skalenabweichung nach FBX-ImportVerschiedene EinheitensystemeVerwenden ObjLoadOptions.Scale oder wende ein Transform nach dem Laden

FAQ

Wie erkenne ich das Format einer unbekannten Datei?

Verwenden FileFormat.Detect():

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

Kann ich aus einem Stream statt einem Dateipfad laden?

Ja. Scene.Open() akzeptiert ein Stream:

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

Welche Formate unterstützen sowohl Import als auch Export?

OBJ, STL, glTF/GLB, FBX, COLLADA und 3MF unterstützen beide Richtungen. PLY unterstützt nur den Import (der PLY-Exporter ist nicht implementiert).


API-Referenzübersicht

Klasse / MethodeBeschreibung
SceneTop-Level-3D-Szenencontainer
Scene.Open()Lade eine 3D-Datei über Pfad oder Stream
Scene.Save()Exportiere Szene in Datei oder Stream
Scene.FromFile()Statische Fabrik zum Laden und Zurückgeben eines Scene
NodeSzenenhierarchie‑Knoten, der Entitäten und Transformationen hält
Node.CreateChildNode()Erstelle und hänge einen Kindknoten an
MeshPolygonnetz mit Kontrollpunkten und Flächenlisten
Mesh.CreatePolygon()Definiere eine Polygonfläche anhand von Scheitelpunktindizes
Box / Sphere / CylinderEingebaute parametrische Primitive
TransformLokale Translation, Rotation und Skalierung
FileFormatRegistrierung und Erkennung für unterstützte Formate
LambertMaterial / PhongMaterial / PbrMaterialMaterialtypen für Schattierung
 Deutsch