Kako učitati 3D modele u .NET

Kako učitati 3D modele u .NET

Aspose.3D for .NET pruža jednostavno API za otvaranje 3D datoteka bez izvornih ovisnosti. Nakon učitavanja datoteke u Scene objekt možete proći kroz node hierarchy i pročitati geometry data za svaki mesh.

Vodič korak po korak

Korak 1: Instalirajte paket

Dodajte NuGet paket u svoj projekt:

dotnet add package Aspose.3D --version 26.1.0

Provjeri:

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

Korak 2: Uvezi klasu Scene

Klasa Scene je kontejner najviše razine za sve 3D podatke. Uvezite prostor imena:

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

Korak 3: Učitaj datoteku

Koristite Scene.Open() za učitavanje bilo kojeg podržanog formata. Biblioteka otkriva format iz ekstenzije datoteke:

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

Ili upotrijebite statičku tvornicu:

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

Oba podržavaju OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY i 3MF.


Korak 4: Prolazak kroz čvorove scene

Učitana scena je stablo Node objekata ukorijenjeno u 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);

Svaki Node može nositi Entity (mreža, kamera, svjetlo). Provjerite node.Entity prije pristupa.


Korak 5: Pristup podacima vrhova i poligona

Pretvori entitet čvora u Mesh i pročitaj njegove kontrolne točke i poligone:

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

Korak 6: Primijeni opcije učitavanja specifične za format

Za finu kontrolu, proslijedite podklasu LoadOptions:

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

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

Ostali razredi opcija: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.


Uobičajeni problemi i rješenja

ImportException prilikom pozivanja Scene.Open()

Datoteka može biti oštećena ili u nepodržanoj varijanti formata. Provjerite otvara li se datoteka u 3D pregledniku i je li format na popisu podržanih.

Nedostaju materijali nakon učitavanja OBJ-a

Postavite datoteku .mtl uz datoteku .obj i osigurajte ObjLoadOptions.EnableMaterials = true.

Neusklađenost koordinatnog sustava (model se čini rotiranim)

Postavi ObjLoadOptions.FlipCoordinateSystem = true ili primijeni rotaciju na Transform korijenskog čvora.

NullReferenceException pristupanje node.Entity

Nije svaki čvor nosi geometriju. Uvijek provjerite if (node.Entity is Mesh mesh) prije pristupa svojstvima mreže.


Često postavljana pitanja (FAQ)

Koje 3D formate mogu učitati?

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

Mogu li učitati iz toka?

Da. Scene.Open() prihvaća Stream:

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

Kako dobiti površinske normale?

Nakon učitavanja, pozovite mesh.GetElement(VertexElementType.Normal) da biste pristupili sloju VertexElementNormal.

Je li biblioteka thread-safe?

Svaka Scene instanca je neovisna. Učitavanje zasebnih datoteka u zasebne Scene instance iz zasebnih niti je sigurno.

 Hrvatski