Cara Memuat Model 3D di .NET
Aspose.3D untuk .NET menyediakan API yang sederhana untuk membuka file 3D tanpa ketergantungan native. Setelah memuat file ke dalam objek Scene, Anda dapat menelusuri hierarki node dan membaca data geometri untuk setiap mesh.
Panduan Langkah-demi-Langkah
Langkah 1: Instal Paket
Tambahkan paket NuGet ke proyek Anda:
dotnet add package Aspose.3D --version 26.1.0Verifikasi:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");Langkah 2: Impor Kelas Scene
Kelas Scene adalah kontainer tingkat atas untuk semua data 3D. Impor namespace:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;Langkah 3: Muat File
Gunakan Scene.Open() untuk memuat format apa pun yang didukung. Perpustakaan mendeteksi format dari ekstensi file:
var scene = new Scene();
scene.Open("model.obj");Atau gunakan pabrik statis:
var scene = Scene.FromFile("model.obj");Keduanya mendukung OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY, dan 3MF.
Langkah 4: Menelusuri Node Adegan
Sebuah scene yang dimuat adalah pohon 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 dapat membawa sebuah Entity (mesh, camera, light). Periksa node.Entity sebelum mengakses.
Langkah 5: Akses Data Vertex dan Poligon
Lakukan casting entitas node ke Mesh dan baca titik kontrol serta poligon:
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 Opsi Muat Spesifik Format
Untuk kontrol yang lebih halus, berikan subclass LoadOptions:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);Kelas opsi lainnya: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
Masalah Umum dan Solusi
ImportException saat memanggil Scene.Open()
File mungkin rusak atau dalam varian format yang tidak didukung. Verifikasi bahwa file dapat dibuka di penampil 3D dan bahwa format tersebut ada dalam daftar yang didukung.
Material yang hilang setelah memuat OBJ
Tempatkan file .mtl di samping file .obj dan pastikan ObjLoadOptions.EnableMaterials = true.
Ketidaksesuaian sistem koordinat (model tampak diputar)
Atur ObjLoadOptions.FlipCoordinateSystem = true atau terapkan rotasi pada Transform node akar.
NullReferenceException mengakses node.Entity
Tidak setiap node membawa geometri. Selalu periksa if (node.Entity is Mesh mesh) sebelum mengakses properti mesh.
Pertanyaan yang Sering Diajukan (FAQ)
Format 3D apa yang dapat saya muat?
OBJ, STL (biner dan ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY, dan 3MF.
Bisakah saya memuat dari aliran?
Ya. Scene.Open() menerima sebuah Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Bagaimana cara saya mendapatkan normal permukaan?
Setelah memuat, panggil mesh.GetElement(VertexElementType.Normal) untuk mengakses lapisan VertexElementNormal.
Apakah perpustakaan ini aman untuk thread?
Setiap Scene instance bersifat independen. Memuat file terpisah ke dalam Scene instance yang terpisah dari thread terpisah aman.