Kuinka ladata 3D-malleja .NET-ympäristössä

Kuinka ladata 3D-malleja .NET-ympäristössä

Aspose.3D for .NET tarjoaa suoraviivaisen API:n 3D‑tiedostojen avaamiseen ilman natiiviriippuvuuksia. Kun tiedosto on ladattu Scene‑objektiin, voit käydä läpi node hierarchy -rakenteen ja lukea geometry data jokaisesta meshistä.

Vaiheittainen opas

Vaihe 1: Asenna paketti

Lisää NuGet‑paketti projektiisi:

dotnet add package Aspose.3D --version 26.1.0

Vahvista:

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

Vaihe 2: Tuo Scene-luokka

Scene-luokka on ylimmän tason säiliö kaikille 3D‑tiedoille. Tuo nimiavaruus:

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

Vaihe 3: Lataa tiedosto

Käytä Scene.Open() ladataksesi minkä tahansa tuetun formaatin. Kirjasto tunnistaa formaatin tiedostopäätteestä:

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

Tai käytä staattista tehdasta:

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

Molemmat tukevat OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY ja 3MF.


Vaihe 4: Kulje läpi kohtauksen solmut

Ladattu kohtaus on Node-objektien puu, jonka juuri on 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);

Jokainen Node voi sisältää Entity (verkko, kamera, valo). Tarkista node.Entity ennen käyttöä.


Vaihe 5: Pääsy Vertex‑ ja Polygon‑tietoihin

Muunna solmun entiteetti Mesh:ksi ja lue sen ohjauspisteet ja polygonit:

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

Vaihe 6: Käytä formaattiin liittyviä latausasetuksia

Hienojakoista hallintaa varten, välitä LoadOptions alaluokka:

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

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

Muut vaihtoehtoluokat: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.


Yleisiä ongelmia ja korjauksia

ImportException kun kutsutaan Scene.Open()

Tiedosto voi olla vioittunut tai siinä voi olla tukematon formaattivariantti. Varmista, että tiedosto avautuu 3D viewer -ohjelmassa ja että formaatti on tuettujen luettelossa.

Puuttuvat materiaalit OBJ‑latauksen jälkeen

Aseta .mtl‑tiedosto .obj‑tiedoston viereen ja varmista ObjLoadOptions.EnableMaterials = true.

Koordinaatistojärjestelmän epäsopivuus (malli näyttää kierretyltä)

Aseta ObjLoadOptions.FlipCoordinateSystem = true tai sovella kiertoa juurisolmun Transform.

NullReferenceException pääsy node.Entity

Kaikki solmut eivät sisällä geometriaa. Tarkista aina if (node.Entity is Mesh mesh) ennen mesh‑ominaisuuksien käyttämistä.


Usein kysytyt kysymykset (UKK)

Mitä 3D‑muotoja voin ladata?

OBJ, STL (binary ja ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY ja 3MF.

Voinko ladata virrasta?

Kyllä. Scene.Open() hyväksyy Stream:

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

Miten saan pinnan normaalit?

Lataamisen jälkeen kutsu mesh.GetElement(VertexElementType.Normal) päästäksesi VertexElementNormal-kerrokseen.

Onko kirjasto säikeiturvallinen?

Jokainen Scene-instanssi on itsenäinen. Eri tiedostojen lataaminen eri Scene-instansseihin eri säikeistä on turvallista.

 Suomi