در پست معرفی,، ما بررسی کردیم که Aspose.3D FOSS برای .NET چیست و چگونه شروع کنیم. این پست عمیق‌تر به ویژگی‌های کلیدی که کتابخانه را تشکیل می‌دهند می‌پردازد، با مثال‌های کد برای هر بخش.

تمام مثال‌ها فرض می‌کنند که دستور using زیر استفاده شده است:

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

و بسته NuGet:

dotnet add package Aspose.3D --version 26.1.0

گراف صحنه

گراف صحنه ساختار داده اصلی است. یک Scene حاوی یک RootNode, و هر Node می‌تواند گره‌های فرزند و یک پیوست شده داشته باشد Entity (مانند یک Mesh یا Camera).

ایجاد و مرور گره‌ها

var scene = new Scene();

// Create a hierarchy
var parent = scene.RootNode.CreateChildNode("Parent");
var child1 = parent.CreateChildNode("Child1");
var child2 = parent.CreateChildNode("Child2");

// Navigate the tree
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);
Console.WriteLine("Parent children: " + parent.ChildNodes.Count);

پیوست کردن Entityها به گره‌ها

نهادها محتوای بصری صحنه هستند – مش‌ها، دوربین‌ها و نورها. آن‌ها را با استفاده از CreateChildNode:

var scene = new Scene();

// Create a box primitive and attach it to the scene
var box = new Box(2, 2, 2);
var boxNode = scene.RootNode.CreateChildNode("BoxNode", box);

// Create a sphere primitive
var sphere = new Sphere(1);
var sphereNode = scene.RootNode.CreateChildNode("SphereNode", sphere);

scene.Save("primitives.gltf");

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

نسخه .NET شامل کلاس‌های شکل پارامتریک است که بدون ساخت دستی رئوس، هندسه را تولید می‌کنند:

شکل اولیهتوضیح
Boxجعبه‌ای هم‌محور با عرض، ارتفاع و عمق قابل تنظیم
Sphereکره پارامتریک با شعاع قابل تنظیم
Cylinderاستوانه پارامتریک با شعاع‌های بالایی/پایینی قابل تنظیم و ارتفاع

این اشکال اولیه می‌توانند مستقیماً به گره‌ها متصل شوند یا به یک Mesh از طریق ToMesh():

var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();

Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);

ساخت مش

اگر به کنترل کامل نیاز دارید، مش‌ها را از صفر با استفاده از نقاط کنترل و تعریف چندضلعی‌ها بسازید:

var mesh = new Mesh();

// Add vertex positions
mesh.ControlPoints.Add(new Vector4(0, 0, 0, 1.0f));
mesh.ControlPoints.Add(new Vector4(1, 0, 0, 1.0f));
mesh.ControlPoints.Add(new Vector4(0.5f, 1, 0, 1.0f));

// Define a triangle face
mesh.CreatePolygon(0, 1, 2);

// Attach to a scene
var scene = new Scene();
scene.RootNode.CreateChildNode("triangle", mesh);
scene.Save("triangle.stl");

نقاط کنترل استفاده می‌کنند Vector4 با w مجموعه مؤلفه تنظیم شده به 1.0f برای موقعیت‌های کارتزین استاندارد. چندضلعی‌ها با عبور ایندکس‌های نقطه کنترل به CreatePolygon().

تبدیلات

هر Node دارای یک Transform ویژگی که موقعیت محلی، چرخش و مقیاس آن را کنترل می‌کند:

var scene = new Scene();

var node = scene.RootNode.CreateChildNode("Moved");
node.Transform.Translation = new FVector3(5, 0, 0);
node.Transform.Scale = new FVector3(2, 2, 2);

ارث‌بری تبدیل

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

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's world position is (15, 0, 0)
// Access via child.GlobalTransform

GlobalTransform

ویژگی فقط‌خواندنی GlobalTransform ویژگی در هر Node ماتریس تبدیل فضای جهانی محاسبه‌شده را پس از ترکیب تمام تبدیلات اجدادی فراهم می‌کند. برای دسترسی به نتیجه از طریق node.GlobalTransform.Matrix.

ماتریال‌ها

این کتابخانه شامل سه نوع ماتریال با پیچیدگی افزایشی است:

LambertMaterial

ماتریال کلاسیک فقط پخش‌کننده:

var material = new LambertMaterial("WoodMaterial");
material.Diffuse = new Vector4(0.6f, 0.4f, 0.2f, 1.0f);
material.Ambient = new Vector4(0.1f, 0.1f, 0.1f, 1.0f);
material.Transparency = 0.0f;

PhongMaterial

از Lambert گسترش می‌یابد و هایلایت‌های Specular را اضافه می‌کند:

var material = new PhongMaterial("ShinyMetal");
material.Specular = new Vector4(0.8f, 0.8f, 0.8f, 1.0f);
material.Shininess = 50.0f;
material.SpecularPower = 32.0f;

PbrMaterial

ماتریال رندرینگ مبتنی بر فیزیک که توسط glTF 2.0 استفاده می‌شود:

var material = new PbrMaterial("GoldPBR");
material.BaseColor = new Vector4(1.0f, 0.8f, 0.2f, 1.0f);
material.Metallic = 0.9f;
material.Roughness = 0.1f;
material.Occlusion = 1.0f;

ماتریال‌های PBR از اسلات‌های بافت برای رنگ پایه، متالیک/خشکی، نرمال، تابش و نقشه‌های انسداد از طریق ویژگی‌های مسیر رشته‌ای بافت پشتیبانی می‌کنند.

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

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

انواع بردار

نوعاجزادقتکاربرد عمومی
Vector2X, Yfloatمختصات بافت UV
Vector3X, Y, Zfloatبردار عمومی ۳ مؤلفه‌ای
Vector4X, Y, Z, Wfloatنقاط کنترل، نرمال‌ها
FVector3X, Y, Zfloatویژگی‌های تبدیل (جابه‌جایی، مقیاس)
FVector4X, Y, Z, Wfloatداده‌های عنصر راس

Quaternion

کواترن‌ها چرخش‌ها را بدون قفل گیمبال نمایش می‌دهند:

var rotation = new Quaternion(0, 0, 0, 1); // Identity
node.Transform.Rotation = rotation;

Matrix4

4x4 transformation matrices for composing transforms:

// Matrix operations are used internally by Transform
// and GlobalTransform for world-space computation

BoundingBox

جعبه‌های محدود‌کننده محور-محور برای پرس‌و‌جوهای فضایی:

// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning

عناصر راس

مش‌ها می‌توانند لایه‌های داده‌ای اضافی برای هر راس فراتر از موقعیت‌ها را حمل کنند:

  • VertexElementNormal – نرمال‌های سطح برای محاسبات نورپردازی.
  • VertexElementUV – مختصات بافت برای نگاشت تصاویر بر روی هندسه.
  • VertexElementVertexColor – داده‌های رنگ RGBA به ازای هر راس.

هر عنصر راس دارای یک MappingMode (به ازای نقطه کنترل، راس چندضلعی یا چندضلعی) و یک ReferenceMode (مقدارهای مستقیم یا مقدارهای ایندکس‌شده).

Animation Clips

کلاس Scene از کلیپ‌های انیمیشن نام‌دار از طریق پشتیبانی می‌کند. CreateAnimationClip() و GetAnimationClip(). در نسخهٔ متن‌باز فعلی، ایجاد و جستجوی کلیپ‌های انیمیشن عملکردی هستند، اما داده‌های فریم‌کلید و پخش هنوز پیاده‌سازی نشده‌اند.

var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");

// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));

چه‌کار بعدی

پست بعدی شامل کار با فرمت‌های فایل 3D در .NET – راهنمای عملی، فرمت به فرمت برای OBJ، STL، glTF، FBX و 3MF با گزینه‌های بارگذاری/ذخیره و الگوهای تبدیل دسته‌ای.