كيفية تحميل نماذج ثلاثية الأبعاد في .NET
Aspose.3D for .NET يوفر واجهة برمجة تطبيقات بسيطة لفتح ملفات ثلاثية الأبعاد دون الاعتماد على مكونات أصلية. بعد تحميل ملف إلى كائن Scene يمكنك استعراض تسلسل العقد وقراءة بيانات الهندسة لكل شبكة.
دليل خطوة بخطوة
الخطوة 1: تثبيت الحزمة
أضف حزمة NuGet إلى مشروعك:
dotnet add package Aspose.3D --version 26.1.0تحقق:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");الخطوة 2: استيراد فئة المشهد
الفئة Scene هي الحاوية العليا لجميع بيانات 3D. استورد مساحة الاسم:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;الخطوة 3: تحميل ملف
استخدم Scene.Open() لتحميل أي تنسيق مدعوم. المكتبة تكتشف التنسيق من امتداد الملف:
var scene = new Scene();
scene.Open("model.obj");أو استخدم المصنع الثابت:
var scene = Scene.FromFile("model.obj");كلاهما يدعمان OBJ و STL و glTF 2.0 / GLB و FBX و COLLADA و PLY و 3MF.
الخطوة 4: استعراض عقد المشهد
المشهد المحمَّل هو شجرة من كائنات Node متجذرة في 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);قد يحمل كل Node Entity (mesh, camera, light). تحقق من node.Entity قبل الوصول.
الخطوة 5: الوصول إلى بيانات الرؤوس والمضلعات
حوّل كيان العقدة إلى Mesh واقرأ نقاط التحكم والمضلعات الخاصة به:
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: تطبيق خيارات التحميل الخاصة بالتنسيق
لتحكم دقيق، مرّر فئة فرعية LoadOptions:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);فئات الخيارات الأخرى: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
المشكلات الشائعة والحلول
ImportException عند استدعاء Scene.Open()
قد يكون الملف تالفًا أو بصيغة غير مدعومة. تحقق من أن الملف يفتح في عارض ثلاثي الأبعاد وأن الصيغة موجودة في القائمة المدعومة.
المواد المفقودة بعد تحميل OBJ
ضع ملف .mtl بجانب ملف .obj وتأكد من ObjLoadOptions.EnableMaterials = true.
عدم توافق نظام الإحداثيات (يظهر النموذج مدورًا)
قم بتعيين ObjLoadOptions.FlipCoordinateSystem = true أو تطبيق دوران على Transform الخاص بعقدة الجذر.
NullReferenceException الوصول إلى node.Entity
ليس كل عقدة تحمل هندسة. تحقق دائمًا من if (node.Entity is Mesh mesh) قبل الوصول إلى خصائص الشبكة.
الأسئلة المتكررة (FAQ)
ما هي صيغ 3D التي يمكنني تحميلها؟
OBJ، STL (ثنائي و ASCII)، glTF 2.0 / GLB، FBX، COLLADA (DAE)، PLY، و 3MF.
هل يمكنني التحميل من تدفق؟
نعم. Scene.Open() يقبل Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);كيف أحصل على المتجهات العمودية للسطح؟
بعد التحميل، استدعِ mesh.GetElement(VertexElementType.Normal) للوصول إلى طبقة VertexElementNormal.
هل المكتبة آمنة للمعالجة المتعددة الخيوط؟
كل مثيل Scene مستقل. تحميل ملفات منفصلة إلى مثيلات Scene منفصلة من خيوط منفصلة آمن.