ما خوشحالیم که اعلام کنیم در دسترس است Aspose.3D FOSS for .NET – یک کتابخانهٔ رایگان و متن‌باز برای کار با فرمت‌های فایل 3D در برنامه‌های .NET. به‌عنوان یک راه‌حل خالص C# بدون وابستگی‌های بومی ساخته شده است، این کتابخانه هدف .NET 10.0 و بالاتر را دارد و دسترسی آن را برای طیف وسیعی از پروژه‌ها و محیط‌ها ممکن می‌سازد.

این پست به بررسی آنچه کتابخانه ارائه می‌دهد، نحوه شروع کار و مسیر پیش‌رو می‌پردازد.

Aspose.3D FOSS برای .NET چیست؟?

Aspose.3D FOSS for .NET یک کتابخانهٔ سبک پردازش فایل 3D است که تحت MIT license. این کتابخانه یک API گراف صحنه ارائه می‌دهد که به شما امکان بارگذاری، بازرسی، تبدیل و ذخیرهٔ مدل‌های 3D را در چندین فرمت پرکاربرد می‌دهد. این کتابخانه به‌طور کامل به زبان C# نوشته شده است و نیازی به باینری‌های بومی خارجی یا پیکربندی‌های خاص پلتفرم ندارد.

کد منبع در گیت‌هاب در دسترس است: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

نکات کلیدی

  • C# خالص – بدون P/Invoke، بدون کتابخانه‌های بومی، بدون محدودیت‌های پلتفرم.
  • .NET 10.0+ سازگار.
  • دارای مجوز MIT – از آن در پروژه‌های شخصی، تجاری یا اختصاصی بدون محدودیت استفاده کنید.
  • معماری گراف صحنه – یک درخت آشنا از گره‌ها، مش‌ها، دوربین‌ها و مواد.
  • پشتیبانی چندفرمت – خواندن و نوشتن فایل‌های OBJ، STL، glTF 2.0، GLB، FBX، Collada و 3MF.

شروع سریع

نصب از NuGet

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

dotnet add package Aspose.3D --version 26.1.0

اولین تبدیل شما

ساده‌ترین حالت استفاده، بارگذاری یک فایل 3D در یک فرمت و ذخیره آن در فرمت دیگر است. در اینجا یک تبدیل دو خطی از OBJ به STL آورده شده است:

using Aspose.ThreeD;

var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");

این Scene کلاس نقطه ورودی مرکزی است. فراخوانی کنید scene.Open() با مسیر فایل برای بارگذاری یک مدل، سپس فراخوانی کنید Save() با مسیر هدف. کتابخانه قالب را از پسوند فایل استنتاج می‌کند.

ساخت یک صحنه از ابتدا

شما همچنین می‌توانید صحنه‌ها را به‌صورت برنامه‌نویسی ایجاد کنید:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
var box = new Box(2, 2, 2);
var node = scene.RootNode.CreateChildNode("Box", box);

node.Transform.Translation = new FVector3(1, 2, 3);

scene.Save("scene.gltf");

این یک صحنه جدید ایجاد می‌کند، یک primitive جعبه‌ای را به‌عنوان گره فرزند زیر ریشه اضافه می‌کند، آن را در مختصات (1, 2, 3) قرار می‌دهد و نتیجه را به‌صورت فایل glTF صادر می‌کند.

بارگذاری با گزینه‌های مخصوص به فرمت

وقتی به کنترل دقیق‌تری بر فرآیند بارگذاری نیاز دارید، هر فرمت یک کلاس گزینه‌های اختصاصی ارائه می‌دهد. برای مثال، بارگذاری یک فایل STL با گزینه‌های صریح:

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

var scene = new Scene();
var opts = new StlLoadOptions();
scene.Open("part.stl", opts);

// Inspect the loaded scene
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);

// Re-export as OBJ
scene.Save("part.obj");

این scene.Open() متد هر یک از انواع گزینه‌های بارگذاری را می‌پذیرد: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions,، یا TmfLoadOptions.

پیمایش گراف صحنه

پس از بارگذاری یک صحنه، می‌توانید درخت گره‌ها را پیمایش کنید تا محتویات آن را بررسی یا تغییر دهید:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
scene.Open("model.gltf");

foreach (var child in scene.RootNode.ChildNodes)
{
    Console.WriteLine("Node: " + child.Name);
    Console.WriteLine("  Translation: " + child.Transform.Translation);

    if (child.Entity is Mesh mesh)
    {
        Console.WriteLine("  Vertices: " + mesh.ControlPoints.Count);
    }
}

این الگو برای اشکال‌زدایی، تولید گزارش درباره محتویات مدل، یا تغییر انتخابی بخش‌هایی از صحنه قبل از صادر مجدد مفید است.

اعمال تبدیلات

موقعیت‌یابی گره‌ها در فضای سه‌بعدی از طریق Transform ویژگی در هر Node:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();

var parent = scene.RootNode.CreateChildNode("Parent");
parent.Transform.Translation = new FVector3(10, 0, 0);

var child = parent.CreateChildNode("Child");
child.Transform.Translation = new FVector3(5, 0, 0);
child.Transform.Scale = new FVector3(2, 2, 2);

// Child's world position is (15, 0, 0) due to
// parent-child transform inheritance

scene.Save("transformed.gltf");

تبدیلات از مدل استاندارد وراثت والد‑فرزند پیروی می‌کنند: موقعیت فضای جهانی یک فرزند ترکیبی از تبدیل محلی آن و تمام تبدیلات اجداد تا ریشه است.

چه چیزهایی گنجانده شده است

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

گراف صحنه

گراف صحنه ستون فقرات API است. هر فایل 3D به صورت ساختار درختی نمایش داده می‌شود:

کلاسنقش
Sceneمحفظه سطح بالا؛ ریشه گراف صحنه
Nodeیک موقعیت نام‌گذاری‌شده در درخت؛ تبدیل‌ها و گره‌های فرزند را نگه می‌دارد
Entityپایهٔ انتزاعی برای اشیای بصری که به گره‌ها متصل می‌شوند
Meshهندسهٔ چندضلعی – رئوس، سطوح، نرمال‌ها
Cameraتعریف دوربین مجازی
Transformجابه‌جایی، چرخش و مقیاس محلی برای یک گره
GlobalTransformتبدیل محاسبه‌شده در فضای جهان

اشکال اولیه داخلی

نسخهٔ .NET شامل کلاس‌های شکل پارامتریک است که می‌توانند مستقیماً به گره‌ها متصل شوند یا به Mesh:

  • جعبه – جعبهٔ محوری‌تراز با عرض، ارتفاع و عمق قابل تنظیم.
  • کره – کرهٔ پارامتریک با شعاع قابل تنظیم.
  • سیلندر – سیلندر پارامتریک با شعاع‌ها و ارتفاع قابل تنظیم.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);

ماتریال‌ها

کتابخانه انواع مختلفی از مواد را فراهم می‌کند:

  • LambertMaterial – ماده کلاسیک فقط پخش‌شونده با مؤلفه‌های رنگ محیطی، پخش‌شونده، تابشی و بازتابی.
  • PhongMaterial – لامبرت را با هایلایت‌های specular و shininess گسترش می‌دهد.
  • PbrMaterial – ماده physically based rendering با base color، metallic، roughness، occlusion و اسلات‌های texture.

ابزارهای ریاضی

این Aspose.ThreeD namespace شامل primitiveهای ریاضی اساسی است:

  • FVector3 – single-precision 3‑component vector برای موقعیت‌ها، جهت‌ها و مقیاس. مورد استفاده توسط Transform.Translation و Transform.Scale.
  • Vector4 – بردار ۴ مؤلفه‌ای تک‌دقت برای نقاط کنترل و نرمال‌ها.
  • Matrix4 – ماتریس تبدیل ۴×۴.
  • Quaternion – نمایش چرخش. استفاده شده توسط Transform.Rotation.
  • BoundingBox – جعبه محدود‌کننده محوری برای پرس‌و‌جوهای فضایی.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations

گزینه‌های بارگذاری و ذخیره‌سازی

هر فرمت کلاس‌های گزینهٔ اختصاصی دارد که به شما امکان کنترل رفتار واردات و صادرات را می‌دهد:

Formatگزینه‌های بارگذاریگزینه‌های ذخیره‌سازی
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptionsFbxSaveOptions
3MFTmfLoadOptionsTmfSaveOptions

به عنوان مثال، برای بارگذاری یک فایل OBJ با وارون‌سازی مختصات و نرمال‌سازی نرمال‌ها:

var opts = new ObjLoadOptions();
opts.FlipCoordinateSystem = true;
opts.NormalizeNormal = true;

scene.Open("model.obj", opts);

فرمت‌های پشتیبانی‌شده

جدول زیر خلاصه‌ای از فرمت‌هایی را که Aspose.3D FOSS برای .NET می‌تواند بخواند و بنویسد، ارائه می‌دهد.

فرمتپسوندوارد کردنصادراتیادداشت‌ها
OBJ.objبلهبلهبا مواد MTL
STL.stlبلهبلهدودویی + ASCII
glTF 2.0.gltfبلهبلهقالب JSON
GLB.glbبلهبلهدودویی glTF
FBX.fbxبلهبلهحالت‌های ASCII و باینری
Collada.daeبلهبله
3MF.3mfبلهبلهفرمت تولید سه‌بعدی مبتنی بر ZIP

راهنمای انتخاب فرمت

انتخاب فرمت مناسب بستگی به مورد استفادهٔ شما دارد:

  • OBJ ایده‌آل است زمانی که به حداکثر سازگاری بین ابزارهای سه‌بعدی نیاز دارید. تقریباً هر برنامه مدل‌سازی می‌تواند OBJ را بخواند و بنویسد. این فرمت برای تبادل داده‌های مش مناسب است اما فقط اطلاعات پایه‌ای مواد را از طریق فایل‌های همراه MTL منتقل می‌کند.
  • STL فرمت مورد انتخاب برای جریان‌های کاری چاپ سه‌بعدی است. این فرمت هندسهٔ مثلثی‌سازی شدهٔ خام را بدون مواد یا سلسله‌مراتب صحنه ذخیره می‌کند، که دقیقاً همان چیزی است که نرم‌افزارهای برش‌دهنده انتظار دارند.
  • glTF استاندارد مدرن برای وب و سه‌بعدی زمان واقعی است. از مواد PBR، سلسله‌مراتب کامل صحنه پشتیبانی می‌کند و برای انتقال کارآمد طراحی شده است. هنگام ساخت نمایشگرهای مبتنی بر وب یا هدف‌گیری هر خط لوله رندرینگ زمان واقعی از glTF استفاده کنید.
  • FBX به‌طور عمیق در جریان‌های کاری توسعه بازی و ایجاد محتوای دیجیتال یکپارچه شده است. از داده‌های صحنه غنی شامل سلسله‌مراتب و مواد پشتیبانی می‌کند. Aspose.3D FOSS برای .NET از FBX پشتیبانی می‌کند واردات و صادرات در هر دو حالت ASCII و باینری.
  • 3MF یک فرمت چاپ سه‌بعدی مدرن است که از فراداده‌های غنی، مواد و صحنه‌های چندشیئی در یک بسته مبتنی بر ZIP پشتیبانی می‌کند.

محدودیت‌های شناخته‌شده

Scene.Render() است پشتیبانی نمی‌شود در نسخه FOSS. فراخوانی این متد یک NotImplementedException. کتابخانه برای پردازش سه‌بعدی مبتنی بر فایل طراحی شده است – بارگذاری، دستکاری، تبدیل و ذخیره مدل‌ها – به‌جای رندرینگ زمان واقعی به نمایشگر.

منبع باز و مجوزدهی

Aspose.3D FOSS برای .NET تحت مجوز MIT. این به این معنی است که شما آزاد هستید تا:

  • از کتابخانه در برنامه‌های تجاری و مالکیتی استفاده کنید.
  • کد منبع را برای برآورده کردن نیازهای خود تغییر دهید.
  • کتابخانه را به عنوان بخشی از نرم‌افزار خود توزیع کنید.

هیچ هزینه حق امتیاز، هیچ محدودیت استفاده و هیچ الزامی برای ذکر منبع فراتر از آنچه مجوز MIT مشخص می‌کند، وجود ندارد.

کد منبع کامل در GitHub میزبانی می‌شود و مشارکت‌ها خوش‌آمد هستند: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

نیازمندی‌های سیستم

نیازمندیجزئیات
.نسخه .NET10.0 or later
وابستگی‌هاهیچ‌کدام (C# خالص)
پلتفرم‌هاهر پلتفرمی که .NET را اجرا می‌کند
مدیر بستهNuGet

شروع کار

در اینجا منابعی برای کمک به شما در شروع کار آورده شده است:

  • مستندات – راهنماهای جامع و مرورهای API در سایت مستندات Aspose.3D.
  • پایگاه دانش – مقالات عملی «چگونه» و نکات عیب‌یابی در Aspose.3D KB.
  • مرجع API – مرجع جزئی کلاس و متد در Aspose.3D مرجع API.
  • کد منبع – مرور و مشارکت در GitHub.
  • NuGet – بسته به عنوان Aspose.3D در NuGet.

موارد استفاده رایج

در اینجا برخی سناریوهای عملی که Aspose.3D FOSS برای .NET به خوبی می‌گنجد آورده شده است:

خطوط لوله تبدیل فرمت

بسیاری از تیم‌ها دارایی‌های 3D را در یک فرمت دریافت می‌کنند اما به فرمت دیگری نیاز دارند. یک تیم طراحی ممکن است در FBX کار کند در حالی که تیم وب به glTF نیاز دارد. این کتابخانه به شما امکان می‌دهد خطوط لوله تبدیل خودکار بسازید:

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

// Convert all incoming FBX assets to GLB for the web team
var scene = new Scene();
scene.Open("asset.fbx");

scene.Save("asset.glb");

3D Model Inspection and Validation

قبل از ادغام یک دارایی 3D در برنامهٔ خود، ممکن است بخواهید محتویات آن را اعتبارسنجی کنید — بررسی تعداد گره‌ها، تأیید هندسه، یا اطمینان از حضور عناصر مورد انتظار:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
scene.Open("model.obj");

int nodeCount = scene.RootNode.ChildNodes.Count;
Console.WriteLine("Top-level nodes: " + nodeCount);

foreach (var child in scene.RootNode.ChildNodes)
{
    if (child.Entity is Mesh mesh)
    {
        Console.WriteLine(child.Name + ": "
            + mesh.ControlPoints.Count + " vertices");
    }
}

مونتاژ صحنه

می‌توانید چندین مدل را بارگذاری کنید و آن‌ها را در یک صحنه ترکیب کنید:

using Aspose.ThreeD;

var scene = new Scene();

var part1 = new Scene();
part1.Open("chassis.obj");

var part2 = new Scene();
part2.Open("wheels.obj");

// Add nodes from each part into the combined scene
foreach (var child in part1.RootNode.ChildNodes)
{
    scene.RootNode.ChildNodes.Add(child);
}
foreach (var child in part2.RootNode.ChildNodes)
{
    scene.RootNode.ChildNodes.Add(child);
}

scene.Save("assembled.gltf");

چه‌کار بعدی

در پست‌های آینده، ما به موارد زیر می‌پردازیم:

  • یک بررسی عمیق از ویژگی‌های کلیدی API scene-graph، مواد و ابزارهای ریاضی.
  • راهنمای عملی برای کار با هر فرمت 3D پشتیبانی‌شده — OBJ، STL، glTF، FBX و 3MF — شامل گزینه‌های بارگذاری/ذخیره و الگوهای تبدیل دسته‌ای.

منتظر بمانید و آزاد باشید کتابخانه را کاوش کنید و بازخورد خود را در GitHub به اشتراک بگذارید.