Hur man laddar 3D-modeller i .NET

Hur man laddar 3D-modeller i .NET

Aspose.3D för .NET ger en enkel API för att öppna 3D-filer utan inhemska beroende. Scene objekt du kan gå knuthierarkin och läsa geometriska data för varje mesh.

Steg för steg guide

Steg 1: Installera paketet

Lägg till NuGet-paketet i ditt projekt:

dotnet add package Aspose.3D.FOSS

Kontrollera att:

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

Steg 2: Importera scenen klass

Den Scene klass är den högsta nivån container för alla 3D-data.Importera namnsektorn:

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

Steg 3: Ladda upp en fil

Användning Scene.Open() för att ladda upp något stöds format. biblioteket upptäcker formatet från filändelsen:

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

Använd den statiska fabriken:

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

Båda stöder OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY och 3MF.


Steg 4: Övergång Scene Nodes

En laddad scen är ett träd av Node föremål som är rötta 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);

Varje Node kan bära en Entity (Mesh, kamera och ljus) Kontrollera node.Entity innan du får tillgång.


Steg 5: Tillgång till Vertex och Polygon Data

Hämta en node entitet till Mesh Läs om dess kontrollpunkter och polygoner:

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: Tillämpa format-specifika laddningsalternativ

För fingrön kontroll, pass a LoadOptions Subklassen är:

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

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

Andra alternativ klasser: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.


Vanliga problem och fixar

ImportException När ringer Scene.Open()

Filen kan vara korrupt eller i en okänd formatvariant. Kontrollera att filen öppnas i ett 3D-sökare och att formatet är på listan som stöds.

Saknas material efter OBJ-laddning

Placera den .mtl filer bredvid den .obj filer och säkerhet ObjLoadOptions.EnableMaterials = true.

Systemets koordinat missmatch (modellen visas roterad)

Setade ObjLoadOptions.FlipCoordinateSystem = true eller applicera en rotation på rötnoden Transform.

NullReferenceException Tillgång node.Entity

Inte alla noder bär geometri. alltid kolla if (node.Entity is Mesh mesh) innan man får tillgång till mässa.


Ofta ställda frågor (FAQ)

Vilka 3D-format kan jag ladda?

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

Kan jag ladda från en ström?

Ja ja . Scene.Open() accepterar A Stream:

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

Hur får jag ytnormer?

Efter laddning, ringa mesh.GetElement(VertexElementType.Normal) för att komma åt den VertexElementNormal Skikt är.

Är biblioteket trådsäker?

Varje Scene instans är oberoende. Ladda upp separata filer till separerade Scene Exempel från separata trådar är säkra.

 Svenska