Cara Memuat Model 3D di .NET

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

Verifikasi:

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.

 Bahasa Indonesia