چگونه مدل‌های سه‌بعدی را در .NET بارگذاری کنیم

چگونه مدل‌های سه‌بعدی را در .NET بارگذاری کنیم

Aspose.3D for .NET یک API ساده برای باز کردن فایل‌های 3D بدون وابستگی‌های بومی فراهم می‌کند. پس از بارگذاری یک فایل در شیء Scene می‌توانید سلسله‌مراتب گره‌ها را پیمایش کنید و داده‌های هندسی هر مش را بخوانید.

راهنمای گام به گام

مرحله 1: نصب بسته

پکیج NuGet را به پروژه خود اضافه کنید:

dotnet add package Aspose.3D --version 26.1.0

تأیید:

using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");

مرحله ۲: وارد کردن کلاس Scene

کلاس Scene بالاترین سطح مخزن برای تمام داده‌های سه‌بعدی است. فضای نام را وارد کنید:

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

مرحله ۳: بارگذاری یک فایل

از 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})");
        }
    }
}

مرحله ۶: اعمال گزینه‌های بارگذاری مخصوص فرمت

برای کنترل دقیق، یک زیرکلاس 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()

فایل ممکن است خراب شده باشد یا در یک نوع فرمت پشتیبانی‌نشده باشد. اطمینان حاصل کنید که فایل در یک نمایشگر 3D باز می‌شود و فرمت آن در فهرست پشتیبانی‌شده‌ها قرار دارد.

مواد گمشده پس از بارگذاری OBJ

فایل .mtl را در کنار فایل .obj قرار دهید و اطمینان حاصل کنید ObjLoadOptions.EnableMaterials = true.

عدم تطابق سیستم مختصات (مدل به نظر می‌چرخد)

ObjLoadOptions.FlipCoordinateSystem = true را تنظیم کنید یا یک چرخش به Transform گره ریشه اعمال کنید.

NullReferenceException دسترسی node.Entity

هر گره‌ای هندسه ندارد. همیشه قبل از دسترسی به ویژگی‌های مش، if (node.Entity is Mesh mesh) را بررسی کنید.


سوالات متداول (FAQ)

کدام فرمت‌های 3D را می‌توانم بارگذاری کنم؟

OBJ، STL (binary و 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 از رشته‌های جداگانه ایمن است.

 فارسی