Hvordan laste 3D-modeller i .NET

Hvordan laste 3D-modeller i .NET

Aspose.3D for .NET gir et enkelt API for å åpne 3D-filer uten native avhengigheter. Etter å ha lastet en fil inn i et Scene-objekt kan du gå gjennom nodehierarkiet og lese geometridata for hver mesh.

Steg-for-steg guide

Steg 1: Installer pakken

Legg til NuGet‑pakken i prosjektet ditt:

dotnet add package Aspose.3D --version 26.1.0

Bekreft:

using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");

Steg 2: Importer Scene‑klassen

Scene-klassen er den øverste beholderen for all 3D‑data. Importer navnerommet:

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

Trinn 3: Last inn en fil

Bruk Scene.Open() for å laste inn et hvilket som helst støttet format. Biblioteket oppdager formatet fra filendelsen:

var scene = new Scene();
scene.Open("model.obj");

Eller bruk den statiske fabrikken:

var scene = Scene.FromFile("model.obj");

Begge støtter OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY og 3MF.


Steg 4: Gå gjennom scenenoder

En lastet scene er et tre av Node‑objekter med roten i 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);

Hver Node kan ha en Entity (mesh, kamera, lys). Sjekk node.Entity før du får tilgang.


Steg 5: Få tilgang til Vertex- og Polygon-data

Kast en nodes enhet til Mesh og les kontrollpunktene og polygonene:

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

Steg 6: Bruk formatspesifikke lastingsalternativer

For finjustert kontroll, send inn en LoadOptions underklasse:

var options = new ObjLoadOptions
{
    FlipCoordinateSystem = true,
    Scale = 0.01,
    EnableMaterials = true
};

var scene = new Scene();
scene.Open("model.obj", options);

Andre alternativklasser: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.


Vanlige problemer og løsninger

ImportException når du kaller Scene.Open()

Filen kan være korrupt eller i en ikke‑støttet formatvariant. Kontroller at filen åpnes i en 3D‑viser og at formatet er i den støttede listen.

Manglende materialer etter OBJ-lastning

Plasser .mtl-filen ved siden av .obj-filen og sørg for ObjLoadOptions.EnableMaterials = true.

Koordinatsystem mismatch (modellen ser rotert ut)

Angi ObjLoadOptions.FlipCoordinateSystem = true eller bruk en rotasjon på rotnodeens Transform.

NullReferenceException får tilgang til node.Entity

Ikke hver node inneholder geometri. Sjekk alltid if (node.Entity is Mesh mesh) før du får tilgang til mesh‑egenskaper.


Ofte stilte spørsmål (FAQ)

Hvilke 3D‑formater kan jeg laste inn?

OBJ, STL (binær og ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY og 3MF.

Kan jeg laste fra en strøm?

Ja. Scene.Open() aksepterer en Stream:

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

Hvordan får jeg overflatenormaler?

Etter lasting, kall mesh.GetElement(VertexElementType.Normal) for å få tilgang til VertexElementNormal‑laget.

Er biblioteket trådsikkert?

Hver Scene‑instans er uavhengig. Å laste separate filer inn i separate Scene‑instanser fra separate tråder er trygt.

 Norsk