Wie man 3D-Modelle in .NET lädt
Aspose.3D für .NET bietet eine einfache API zum Öffnen von 3D-Dateien ohne native Abhängigkeiten. Nach dem Laden einer Datei in ein Scene Objekt können Sie die Knotenhierarchie zu gehen und geometrische Daten für jedes Netz lesen.
Schritt für Schritte
Schritt 1: Installieren des Pakets
Fügen Sie das NuGet-Paket zu Ihrem Projekt hinzu:
dotnet add package Aspose.3D.FOSSÜberprüfen:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");Schritt 2: Importieren der Szenenklasse
Die Scene class ist der oberste Container für alle 3D-Daten. Import des Namensraums:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;Schritt 3: Laden einer Datei ein
Verwendung Scene.Open() Die Bibliothek erkennt das Format aus der Dateierweiterung:
var scene = new Scene();
scene.Open("model.obj");Oder benutze die statische Fabrik:
var scene = Scene.FromFile("model.obj");Beide unterstützen OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY und 3MF.
Schritt 4: Traverse-Szenenknoten
Eine geladene Szene ist ein Baum von Node Objekte, die auf der scene.RootNode:
void Walk(Node node, int depth = 0)
{
var indent = new string(' ', depth * 2);
Console.WriteLine($"{indent}Node: {node.Name}");
foreach (var child in node.ChildNodes)
Walk(child, depth + 1);
}
Walk(scene.RootNode);Jeder von ihnen Node kann eine Entity - Ich habe keine Ahnung. node.Entity Vor dem Zugang.
Schritt 5: Zugriff auf Vertex- und Polygondaten
Die Entität eines Knoten auf die Mesh und die Kontrollpunkte und Polygone ablesen:
using Aspose.ThreeD.Entities;
foreach (var node in scene.RootNode.ChildNodes)
{
if (node.Entity is Mesh mesh)
{
Console.WriteLine($"Mesh '{node.Name}': " +
$"{mesh.ControlPoints.Count} vertices, " +
$"{mesh.PolygonCount} polygons");
if (mesh.ControlPoints.Count > 0)
{
var v = mesh.ControlPoints[0];
Console.WriteLine($" First vertex: ({v.x:F4}, {v.y:F4}, {v.z:F4})");
}
}
}Schritt 6: Anwendungen für Format-spezifische Ladeoptionen
Für die Feinkörnchenkontrolle wird eine LoadOptions Unterklasse:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);sonstige Optionsklassen: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
Häufige Probleme und Lösungen
ImportException beim Anrufen Scene.Open()
Die Datei kann beschädigt sein oder in einer nicht unterstützten Formatvariante. Überprüfen Sie, ob die Datenbank im 3D-Viewer geöffnet wird und dass das Format in der Liste des unterstützen Formats ist.
Fehlende Materialien nach OBJ-Ladung
Die .mtl Die Liste ist neben der .obj Einreichung und Sicherstellung ObjLoadOptions.EnableMaterials = true.
Koordinatensystem-Ungleichheit (Modell wird gedreht)
Setz ObjLoadOptions.FlipCoordinateSystem = true oder eine Rotation auf den Wurzelknoten anwenden Transform.
NullReferenceException Zugriff node.Entity
Nicht jeder Knoten trägt Geometrie. if (node.Entity is Mesh mesh) vor dem Zugriff auf die Mascheneigenschaften.
Häufig gestellte Fragen (FAQ)
Welche 3D-Formate kann ich laden?
OBJ, STL (binär und ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY und 3MF.
Kann ich von einem Strom laden?
- Ja, das war ich.
Scene.Open()Akzeptiert eineStream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Wie bekomme ich Oberflächennormale?
Nach dem Laden rufen Sie mesh.GetElement(VertexElementType.Normal) Zugang zu den VertexElementNormal Schicht.
Ist die Bibliothek sicher?
Jeder Scene Instanz ist unabhängig. Lade einzelne Dateien in separate Scene Instanzen von separaten Threads ist sicher.