में परिचय पोस्ट, हम ने कवर किया कि Aspose.3D FOSS for .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);
नोड्स में एंटिटीज़ संलग्न करना
इकाइयाँ दृश्य की दृश्य सामग्री हैं – मेष, कैमरे, और लाइट्स। उन्हें उपयोग करके संलग्न करें 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 | परिमितीय cylinder जिसमें शीर्ष/नीचे के radius और height को कॉन्फ़िगर किया जा सकता है |
इन प्रिमिटिव्स को सीधे नोड्स से जोड़ा जा सकता है या उन्हें एक 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
लैम्बर्ट को स्पेक्यूलर हाइलाइट्स के साथ विस्तारित करता है:
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 मैटेरियल स्ट्रिंग टेक्सचर पाथ प्रॉपर्टीज़ के माध्यम से बेस कलर, मेटैलिक/रफ़नेस, नॉर्मल, एमिसिव, और ऑक्लूज़न मैप्स के लिए टेक्सचर स्लॉट्स का समर्थन करते हैं।.
गणित उपयोगिताएँ
लाइब्रेरी 3D स्थानिक संचालन के लिए गणितीय प्रिमिटिव्स का एक सेट प्रदान करती है:
वेक्टर प्रकार
| प्रकार | घटक | सटीकता | सामान्य उपयोग |
|---|---|---|---|
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
क्वाटरनियन घूर्णन को गिम्बल लॉक के बिना दर्शाते हैं:
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
Vertex Elements
मेशेज़ स्थितियों के अलावा अतिरिक्त प्रति-वर्टेक्स डेटा लेयर्स ले जा सकते हैं:
- VertexElementNormal – लाइटिंग गणनाओं के लिए सतह नॉर्मल्स।.
- VertexElementUV – जियोमेट्री पर इमेज मैपिंग के लिए टेक्सचर कोऑर्डिनेट्स।.
- VertexElementVertexColor – प्रति-वर्टेक्स RGBA रंग डेटा।.
प्रत्येक वर्टेक्स एलिमेंट में एक MappingMode (प्रति कंट्रोल पॉइंट, प्रति पॉलीगॉन वर्टेक्स, या प्रति पॉलीगॉन) और एक ReferenceMode (डायरेक्ट वैल्यूज़ या इंडेक्स्ड वैल्यूज़)।.
Animation Clips
यह Scene क्लास नामित एनीमेशन क्लिप्स को समर्थन देती है द्वारा CreateAnimationClip() और GetAnimationClip(). वर्तमान FOSS संस्करण में, एनीमेशन क्लिप निर्माण और लुकअप कार्यात्मक हैं, लेकिन कीफ़्रेम डेटा और प्लेबैक अभी तक लागू नहीं किए गए हैं।.
var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");
// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));
आगे क्या है
अगला पोस्ट कवर करता है .NET में 3D फ़ाइल फ़ॉर्मैट्स के साथ काम करना – OBJ, STL, glTF, FBX, और 3MF के लिए व्यावहारिक, फ़ॉर्मेट-वार गाइड, जिसमें लोड/सेव विकल्प और बैच रूपांतरण पैटर्न शामिल हैं।.