3D Modelleri .NET'te Nasıl Yüklenir
Aspose.3D for .NET, yerel bağımlılıklar olmadan 3D dosyalarını açmak için basit bir API sağlar. Bir dosyayı Scene nesnesine yükledikten sonra düğüm hiyerarşisini gezebilir ve her ağ için geometri verilerini okuyabilirsiniz.
Adım-Adım Kılavuz
Adım 1: Paketi Yükleyin
NuGet paketini projenize ekleyin:
dotnet add package Aspose.3D --version 26.1.0Doğrula:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");Adım 2: Scene Sınıfını İçe Aktar
Scene sınıfı, tüm 3D verileri için üst düzey kapsayıcıdır. Ad alanını içe aktarın:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;Adım 3: Bir Dosya Yükle
Scene.Open() kullanarak herhangi bir desteklenen formatı yükleyin. Kütüphane, formatı dosya uzantısından algılar:
var scene = new Scene();
scene.Open("model.obj");Veya statik fabrikayı kullanın:
var scene = Scene.FromFile("model.obj");İkisi de OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY ve 3MF’yi destekler.
Adım 4: Sahne Düğümlerini Gezin
Yüklenmiş bir sahne, Node nesnelerinden oluşan ve scene.RootNode‘de köklenen bir ağaçtır:
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);Her Node bir Entity (mesh, kamera, ışık) taşıyabilir. Erişmeden önce node.Entity kontrol edin.
Adım 5: Vertex ve Polygon Verilerine Erişim
Bir düğümün varlığını Mesh tipine dönüştürün ve kontrol noktalarını ve çokgenlerini okuyun:
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})");
}
}
}Adım 6: Biçim‑Özel Yükleme Seçeneklerini Uygula
İnce ayarlı kontrol için, bir LoadOptions alt sınıfı geçirin:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);Diğer seçenek sınıfları: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
Yaygın Sorunlar ve Çözümler
ImportException çağırırken Scene.Open()
Dosya bozulmuş olabilir veya desteklenmeyen bir format varyantında olabilir. Dosyanın bir 3D görüntüleyicide açıldığını ve formatın desteklenen listede olduğunu doğrulayın.
OBJ yüklemesinden sonra eksik materyaller
.mtl dosyasını .obj dosyasının yanına yerleştirin ve ObjLoadOptions.EnableMaterials = true sağlayın.
Koordinat sistemi uyumsuzluğu (model döndürülmüş görünüyor)
ObjLoadOptions.FlipCoordinateSystem = true ayarlayın veya kök düğümünün Transform‘ına bir dönüş uygulayın.
NullReferenceException erişiyor node.Entity
Her düğüm geometri taşımaz. Mesh özelliklerine erişmeden önce her zaman if (node.Entity is Mesh mesh) kontrol edin.
Sıkça Sorulan Sorular (SSS)
Hangi 3D formatlarını yükleyebilirim?
OBJ, STL (binary ve ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY ve 3MF.
Bir akıştan yükleyebilir miyim?
Evet. Scene.Open() bir Stream kabul eder:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Yüzey normallerini nasıl elde ederim?
Yükleme işleminden sonra, mesh.GetElement(VertexElementType.Normal) çağırarak VertexElementNormal katmanına erişin.
Kütüphane iş parçacığı güvenli mi?
Her Scene örneği bağımsızdır. Ayrı dosyaları ayrı Scene örneklerine ayrı iş parçacıklarından yüklemek güvenlidir.