Cara Memuatkan Model 3D dalam .NET
Aspose.3D untuk .NET menyediakan API yang mudah untuk membuka fail 3D tanpa kebergantungan natif. Selepas memuatkan fail ke dalam objek Scene, anda boleh menelusuri hierarki nod dan membaca data geometri bagi setiap mesh.
Panduan Langkah demi Langkah
Langkah 1: Pasang Pakej
Tambah pakej NuGet ke projek anda:
dotnet add package Aspose.3D --version 26.1.0Sahkan:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");Langkah 2: Import Kelas Scene
Kelas Scene adalah kontena peringkat atas untuk semua data 3D. Import ruang nama:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;Langkah 3: Muat Fail
Gunakan Scene.Open() untuk memuatkan mana-mana format yang disokong. Perpustakaan mengesan format daripada sambungan fail:
var scene = new Scene();
scene.Open("model.obj");Atau gunakan kilang statik:
var scene = Scene.FromFile("model.obj");Kedua-duanya menyokong OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY, dan 3MF.
Langkah 4: Lintasi Nod Adegan
Sebuah adegan yang dimuatkan ialah pokok objek Node yang berakar pada 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);Setiap Node mungkin membawa Entity (mesh, kamera, cahaya). Periksa node.Entity sebelum mengakses.
Langkah 5: Akses Data Vertex dan Polygon
Lakukan penukaran entiti nod kepada Mesh dan baca titik kawalan serta poligonnya:
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})");
}
}
}Langkah 6: Terapkan Pilihan Muat Mengikut Format
Untuk kawalan terperinci, hantarkan subkelas LoadOptions:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);Kelas pilihan lain: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
Isu Umum dan Penyelesaian
ImportException apabila memanggil Scene.Open()
Fail mungkin rosak atau dalam varian format yang tidak disokong. Sahkan fail dibuka dalam penonton 3D dan format tersebut berada dalam senarai yang disokong.
Bahan yang hilang selepas muat OBJ
Letakkan fail .mtl di sebelah fail .obj dan pastikan ObjLoadOptions.EnableMaterials = true.
Ketidakcocokan sistem koordinat (model kelihatan berputar)
Tetapkan ObjLoadOptions.FlipCoordinateSystem = true atau terapkan putaran pada Transform nod akar.
NullReferenceException mengakses node.Entity
Tidak setiap nod membawa geometri. Sentiasa periksa if (node.Entity is Mesh mesh) sebelum mengakses sifat mesh.
Soalan Lazim (FAQ)
Format 3D mana yang boleh dimuat?
OBJ, STL (binari dan ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY, dan 3MF.
Bolehkah saya memuatkan dari aliran?
Ya. Scene.Open() menerima satu Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Bagaimana saya dapat normal permukaan?
Selepas dimuatkan, panggil mesh.GetElement(VertexElementType.Normal) untuk mengakses lapisan VertexElementNormal.
Adakah perpustakaan selamat untuk penggunaan berbilang benang?
Setiap Scene contoh adalah bebas. Memuatkan fail berasingan ke dalam Scene contoh yang berasingan daripada benang berasingan adalah selamat.