.NET में 3D मॉडल कैसे लोड करें
Aspose.3D for .NET एक सरल API प्रदान करता है जो मूल निर्भरताओं के बिना 3D फ़ाइलें खोलता है। फ़ाइल को Scene ऑब्जेक्ट में लोड करने के बाद आप नोड पदानुक्रम को पार कर सकते हैं और प्रत्येक मेष के लिए ज्यामिति डेटा पढ़ सकते हैं।
चरण-दर-चरण मार्गदर्शिका
चरण 1: पैकेज स्थापित करें
अपने प्रोजेक्ट में NuGet पैकेज जोड़ें:
dotnet add package Aspose.3D --version 26.1.0सत्यापित करें:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");चरण 2: सीन क्लास आयात करें
Scene क्लास सभी 3D डेटा के लिए शीर्ष-स्तर कंटेनर है। नेमस्पेस आयात करें:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;चरण 3: फ़ाइल लोड करें
Scene.Open() का उपयोग करके किसी भी समर्थित फ़ॉर्मेट को लोड करें। लाइब्रेरी फ़ाइल एक्सटेंशन से फ़ॉर्मेट का पता लगाती है:
var scene = new Scene();
scene.Open("model.obj");या स्थैतिक फ़ैक्टरी का उपयोग करें:
var scene = Scene.FromFile("model.obj");दोनों समर्थन करते हैं OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY, और 3MF।
चरण 4: सीन नोड्स को पार करें
लोड किया गया सीन Node वस्तुओं का एक पेड़ है, जिसकी जड़ scene.RootNode पर है:
void Walk(Node node, int depth = 0)
{
var indent = new string(' ', depth * 2);
Console.WriteLine($"{indent}Node: {node.Name}");
foreach (var child in node.ChildNodes)
Walk(child, depth + 1);
}
Walk(scene.RootNode);प्रत्येक Node में एक Entity (जाल, कैमरा, प्रकाश) हो सकता है। पहुँचने से पहले node.Entity जाँचें।
चरण 5: वर्टेक्स और पॉलीगॉन डेटा तक पहुँचें
एक नोड की एंटिटी को Mesh में कास्ट करें और उसके कंट्रोल पॉइंट्स और पॉलीगॉन्स पढ़ें:
using Aspose.ThreeD.Entities;
foreach (var node in scene.RootNode.ChildNodes)
{
if (node.Entity is Mesh mesh)
{
Console.WriteLine($"Mesh '{node.Name}': " +
$"{mesh.ControlPoints.Count} vertices, " +
$"{mesh.PolygonCount} polygons");
if (mesh.ControlPoints.Count > 0)
{
var v = mesh.ControlPoints[0];
Console.WriteLine($" First vertex: ({v.X:F4}, {v.Y:F4}, {v.Z:F4})");
}
}
}चरण 6: फ़ॉर्मेट-विशिष्ट लोड विकल्प लागू करें
सूक्ष्म नियंत्रण के लिए, एक LoadOptions उपवर्ग पास करें:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);अन्य विकल्प वर्ग: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions।
सामान्य समस्याएँ और समाधान
ImportException कॉल करते समय Scene.Open()
फ़ाइल भ्रष्ट हो सकती है या असमर्थित फ़ॉर्मेट वैरिएंट में हो सकती है। फ़ाइल को 3D व्यूअर में खोलने और यह सुनिश्चित करने की जाँच करें कि फ़ॉर्मेट समर्थित सूची में है।
OBJ लोड करने के बाद सामग्री गायब हैं
.mtl फ़ाइल को .obj फ़ाइल के साथ रखें और सुनिश्चित करें ObjLoadOptions.EnableMaterials = true।
कोऑर्डिनेट सिस्टम में असंगति (मॉडल घुमाया हुआ दिखता है)
ObjLoadOptions.FlipCoordinateSystem = true सेट करें या रूट नोड के Transform पर घुमाव लागू करें।
NullReferenceException एक्सेस कर रहा है node.Entity
हर नोड में ज्यामिति नहीं होती। मेष गुणों तक पहुँचने से पहले हमेशा if (node.Entity is Mesh mesh) जाँचें।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
मैं कौन से 3D फ़ॉर्मेट लोड कर सकता हूँ?
OBJ, STL (बाइनरी और ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY, और 3MF.
क्या मैं स्ट्रीम से लोड कर सकता हूँ?
हाँ। Scene.Open() एक Stream स्वीकार करता है:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);मैं सतह के सामान्य कैसे प्राप्त करूँ?
लोड करने के बाद, mesh.GetElement(VertexElementType.Normal) को कॉल करें ताकि VertexElementNormal लेयर तक पहुंच सकें।
क्या लाइब्रेरी थ्रेड-सेफ़ है?
प्रत्येक Scene इंस्टेंस स्वतंत्र है। अलग-अलग थ्रेड्स से अलग-अलग Scene इंस्टेंस में अलग-अलग फ़ाइलें लोड करना सुरक्षित है।