Hogyan töltsünk be 3D modelleket .NET-ben

Hogyan töltsünk be 3D modelleket .NET-ben

Aspose.3D for .NET egyszerű API-t biztosít 3D fájlok megnyitásához natív függőségek nélkül. Egy fájl betöltése után egy Scene objektumba bejárhatja a csomópont‑hierarchiát, és minden hálóhoz kiolvashatja a geometriai adatokat.

Lépésről‑lépésre útmutató

1. lépés: A csomag telepítése

Adja hozzá a NuGet csomagot a projektjéhez:

dotnet add package Aspose.3D --version 26.1.0

Ellenőrizze:

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

2. lépés: A Scene osztály importálása

A Scene osztály a legfelső szintű tároló minden 3D adat számára. Importálja a névteret:

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

3. lépés: Fájl betöltése

Használja a Scene.Open()-t bármely támogatott formátum betöltéséhez. A könyvtár a formátumot a fájl kiterjesztéséből észleli:

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

Vagy használja a statikus gyárat:

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

Mindkettő támogatja az OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY és a 3MF formátumokat.


4. lépés: Jelenet csomópontok bejárása

A betöltött jelenet egy Node objektumokból álló fa, amelynek gyökere 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);

Minden Node hordozhat egy Entity (mesh, camera, light). Ellenőrizze a node.Entity-t a hozzáférés előtt.


5. lépés: Csúcs és sokszög adatok elérése

Kastold egy csomópont entitását Mesh-re, és olvasd ki a vezérlőpontjait és a poligonokat:

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

6. lépés: Formátum-specifikus betöltési beállítások alkalmazása

Finomhangolt vezérléshez adjon át egy LoadOptions alosztályt:

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

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

Egyéb opcióosztályok: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.


Gyakori problémák és megoldások

ImportException híváskor Scene.Open()

A fájl sérült lehet, vagy nem támogatott formátumváltozatban van. Ellenőrizze, hogy a fájl megnyílik egy 3D megjelenítőben, és hogy a formátum szerepel a támogatott listán.

Hiányzó anyagok az OBJ betöltése után

Helyezze a .mtl fájlt a .obj fájl mellé, és biztosítsa, hogy ObjLoadOptions.EnableMaterials = true.

Koordináta-rendszer eltérés (a modell elfordítottnak tűnik)

Állítsa be ObjLoadOptions.FlipCoordinateSystem = true vagy alkalmazzon egy forgatást a gyökércsomópont Transform-ra.

NullReferenceException elérése node.Entity

Nem minden csomópont tartalmaz geometriát. Mindig ellenőrizze a if (node.Entity is Mesh mesh)-t, mielőtt a háló tulajdonságaihoz hozzáférne.


Gyakran Ismételt Kérdések (GYIK)

Milyen 3D formátumokat tölthetek be?

OBJ, STL (bináris és ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY és 3MF.

Betölthetek egy adatfolyamból?

Igen. Scene.Open() elfogad egy Stream:

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

Hogyan kapok felületi normálvektorokat?

Betöltés után hívja meg a mesh.GetElement(VertexElementType.Normal) parancsot a VertexElementNormal réteg eléréséhez.

A könyvtár szálbiztos?

Minden Scene példány független. Különálló fájlok betöltése külön Scene példányokba külön szálakról biztonságos.

 Magyar