ב פוסט מבוא, סיקרנו מה 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

גרף הסצנה

גרף הסצנה הוא מבנה הנתונים המרכזי. A 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);

צירוף Entities לצמתים

ישויות הן התוכן החזותי של הסצנה – רשתות, מצלמות ותאורות. צרף אותן באמצעות 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);

בניית Mesh

אם אתם זקוקים לשליטה מלאה, בנו Mesh מאפס באמצעות נקודות שליטה והגדרות פוליגון:

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);

ירושת Transform

טרנספורמים מורכבים דרך היררכיית הסצנה. המיקום במרחב העולם של הילד הוא תוצר של כל הטרנספורמים של האבות:

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 עם הבלטים מראה מבריק:

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וקטור תכליתי בעל 3 רכיבים
Vector4X, Y, Z, Wfloatנקודות שליטה, נורמליות
FVector3X, Y, Zfloatמאפייני שינוי (הזזה, קנה מידה)
FVector4X, Y, Z, Wfloatנתוני רכיב קודקוד

Quaternion

Quaternions מייצגים סיבובים ללא נעילת גימבל:

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

Axis-aligned bounding boxes for spatial queries: תיבות גבול מיושרות לציר לשאילתות מרחביות:

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

Vertex Elements אלמנטים של קודקוד

Meshes can carry additional per-vertex data layers beyond positions: רשתות (Meshes) יכולות לשאת שכבות נתונים נוספות לכל קודקוד מעבר למיקומים:

  • VertexElementNormal – נורמליות משטח לחישובי תאורה.
  • VertexElementUV – קואורדינטות מרקם למיפוי תמונות על גאומטריה.
  • VertexElementVertexColor – נתוני צבע RGBA לכל קודקוד.

לכל רכיב קודקוד יש MappingMode (לפי נקודת שליטה, לפי קודקוד פוליגון, או לפי פוליגון) ו ReferenceMode (ערכים ישירים או ערכים ממופים).

Animation Clips

ה Scene המחלקה תומכת בקטעי אנימציה בשם באמצעות CreateAnimationClip() ו GetAnimationClip(). בגרסת ה‑FOSS הנוכחית, יצירת קטעי אנימציה וחיפוש פעילים, אך נתוני keyframe והפעלה עדיין לא מומשו.

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

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

What’s Next מה הלאה

הפוסט הבא מכסה עבודה עם פורמטים של קבצים תלת‑ממדיים ב‑.NET – מדריך מעשי, פורמט‑אחר‑פורמט ל‑OBJ, STL, glTF, FBX, ו‑3MF עם אפשרויות טעינה/שמירה ותבניות המרה קבוצתיות.