Wie man 3D-Modelle in .NET lädt

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 eine Stream:
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.

 Deutsch