ב פוסט מבוא, סיקרנו מה 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 תומכים במקורות טקסטורה עבור צבע בסיס, מתכת/חספוס, נורמל, פולט, ומפות עכירות דרך מאפייני נתיב טקסטורה מסוג מחרוזת.
כלי מתמטיקה
הספרייה מספקת סט של פרימיטיבים מתמטיים לפעולות מרחביות תלת‑ממדיות:
סוגי וקטורים
| סוג | רכיבים | דיוק | שימוש נפוץ |
|---|---|---|---|
Vector2 | X, Y | float | קואורדינטות מרקם UV |
Vector3 | X, Y, Z | float | וקטור תכליתי בעל 3 רכיבים |
Vector4 | X, Y, Z, W | float | נקודות שליטה, נורמליות |
FVector3 | X, Y, Z | float | מאפייני שינוי (הזזה, קנה מידה) |
FVector4 | X, Y, Z, W | float | נתוני רכיב קודקוד |
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 עם אפשרויות טעינה/שמירה ותבניות המרה קבוצתיות.