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.0Ellenő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.