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:
| Klasse | Richtung | Schlüsseleigenschaften |
|---|---|---|
ObjLoadOptions | Import | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Export | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Import | (Standard‑Einstellungen) |
GltfLoadOptions | Import | (Standard‑Einstellungen) |
GltfSaveOptions | Export | (Standard‑Einstellungen) |
StlLoadOptions | Import | (Standard‑Einstellungen) |
StlSaveOptions | Export | (Standard‑Einstellungen) |
ColladaLoadOptions | Import | FlipCoordinateSystem |
ColladaSaveOptions | Export | Indented, TransformStyle |
PlyLoadOptions | Import | (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ötigenLoadOptions - Primitive konvertieren zu
MeshmitToMesh()vor dem Hinzufügen von Vertex-Elementen - Verwenden
GltfSaveOptionsmit einem.glbErweiterung für kompakte Binärausgabe - Prüfen
node.Entityfürnullvor 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
| Problem | Ursache | Lösung |
|---|---|---|
ImportException beim Laden | Nicht unterstützte oder beschädigte Datei | Stellen 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 gefunden | Platzieren Sie die .mtl Datei neben dem .obj oder setzen ObjLoadOptions.EnableMaterials = true |
| Skalenabweichung nach FBX-Import | Verschiedene Einheitensysteme | Verwenden 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 / Methode | Beschreibung |
|---|---|
Scene | Top-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 |
Node | Szenenhierarchie‑Knoten, der Entitäten und Transformationen hält |
Node.CreateChildNode() | Erstelle und hänge einen Kindknoten an |
Mesh | Polygonnetz mit Kontrollpunkten und Flächenlisten |
Mesh.CreatePolygon() | Definiere eine Polygonfläche anhand von Scheitelpunktindizes |
Box / Sphere / Cylinder | Eingebaute parametrische Primitive |
Transform | Lokale Translation, Rotation und Skalierung |
FileFormat | Registrierung und Erkennung für unterstützte Formate |
LambertMaterial / PhongMaterial / PbrMaterial | Materialtypen für Schattierung |