में परिचय पोस्ट, हमने कवर किया कि Aspose.3D FOSS for Java क्या है और कैसे शुरू किया जाए। यह पोस्ट लाइब्रेरी के मुख्य फीचर्स में गहराई से जाती है, प्रत्येक क्षेत्र के लिए कोड उदाहरणों के साथ।.
सभी उदाहरण निम्नलिखित इम्पोर्ट मानते हैं:
import com.aspose.threed.*;
और Maven निर्भरता:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
सीन ग्राफ API
सीन ग्राफ Aspose.3D FOSS for Java की नींव है। प्रत्येक 3D मॉडल — चाहे फ़ाइल से लोड किया गया हो या प्रोग्रामेटिकली बनाया गया हो — को नोड्स के पेड़ के रूप में दर्शाया जाता है जिसका मूल एक Scene ऑब्जेक्ट।.
Scene
यह Scene क्लास सभी ऑपरेशनों के लिए एंट्री पॉइंट है। आप एक खाली सीन बना सकते हैं या फ़ाइल से लोड कर सकते हैं:
// Empty scene
Scene scene = new Scene();
// Load from file
Scene loaded = Scene.fromFile("model.obj");
// Load with explicit options
Scene fromStl = Scene.fromFile("part.stl", new StlLoadOptions());
नोड ट्री की जड़ तक पहुंचा जाता है getRootNode().
Node
एक Node सीन ट्री में एक नामित स्थिति को दर्शाता है। नोड्स के बच्चे हो सकते हैं, जिससे एक पदानुक्रम बनता है। प्रत्येक नोड एक स्थानीय Transform और एक गणना किया हुआ GlobalTransform.
Scene scene = new Scene();
// Create a child node under the root
Node box = scene.getRootNode().createChildNode("Box");
// Create a nested hierarchy
Node arm = scene.getRootNode().createChildNode("Arm");
Node hand = arm.createChildNode("Hand");
Node finger = hand.createChildNode("Finger");
आप नोड्स को स्वतंत्र रूप से भी बना सकते हैं और बाद में उन्हें संलग्न कर सकते हैं:
Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);
Entity और Mesh
एक Entity एब्स्ट्रैक्ट बेस क्लास है उन सभी चीज़ों के लिए जो नोड से जुड़ी हो सकती हैं — ज्योमेट्री, कैमरे, और लाइट्स। सबसे सामान्य एंटिटी टाइप है Mesh, जो बहुभुज ज्योमेट्री (वर्टिसेज़, फेसेज़, और नॉर्मल्स) रखता है।.
Scene scene = Scene.fromFile("cube.obj");
// Traverse nodes and inspect entities
for (Node child : scene.getRootNode().getChildNodes()) {
Entity entity = child.getEntity();
if (entity instanceof Mesh) {
Mesh mesh = (Mesh) entity;
System.out.println("Node: " + child.getName());
System.out.println(" Vertices: " + mesh.getControlPoints().size());
}
}
Camera
कैमरे ऐसे एंटिटीज़ हैं जो नोड्स से जुड़ते हैं:
Scene scene = new Scene();
Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node
कैमरा परिभाषाएँ उन फ़ॉर्मैट्स में एक्सपोर्ट करते समय संरक्षित रहती हैं जो उनका समर्थन करते हैं (जैसे glTF)।.
नोट: यह Light क्लास Java संस्करण में उपलब्ध नहीं है। आयातित फ़ाइलों से प्राप्त सीन लाइटिंग डेटा को generic Entity ऑब्जेक्ट्स।.
फ़ॉर्मेट-निर्पेक्ष लोड और सेव
लाइब्रेरी की प्रमुख ताकतों में से एक यह है कि सीन ग्राफ फ़ॉर्मेट-स्वतंत्र है। आप किसी भी समर्थित फ़ॉर्मेट से लोड कर सकते हैं, एक ही API के माध्यम से सीन को संशोधित कर सकते हैं, और किसी भी समर्थित फ़ॉर्मेट में सहेज सकते हैं।.
// Load OBJ, save as glTF
Scene scene = Scene.fromFile("input.obj");
scene.save("output.gltf");
// Load FBX, save as STL (FBX is import only)
Scene scene2 = Scene.fromFile("character.fbx");
scene2.save("character.stl");
// Load STL, save as GLB
Scene scene3 = Scene.fromFile("part.stl", new StlLoadOptions());
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene3.save("part.glb", opts);
फ़ॉर्मेट फ़ाइल एक्सटेंशन द्वारा निर्धारित होता है। आप आउटपुट को नियंत्रित करने के लिए स्पष्ट सहेजने विकल्प भी पास कर सकते हैं:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
मैटेरियल्स
Aspose.3D FOSS for Java PBR (Physically Based Rendering) सामग्री मॉडल प्रदान करता है द्वारा PbrMaterial.। यह Java संस्करण में एकमात्र ठोस सामग्री क्लास है।.
PbrMaterial
एक फ़िज़िकली बेस्ड रेंडरिंग मैटेरियल जो अल्बेडो, मेटालनेस, और रफ़नेस पैरामीटरों का उपयोग करता है। यह glTF और आधुनिक रीयल‑टाइम इंजन के लिए मानक मैटेरियल मॉडल है।.
PbrMaterial pbr = new PbrMaterial();
pbr.setAlbedo(new Vector4(0.8, 0.2, 0.2, 1.0)); // Red-ish base color
pbr.setMetallicFactor(0.0); // Non-metallic
pbr.setRoughnessFactor(0.5); // Medium roughness
फ़ॉर्मेट्स के बीच मैटेरियल संरक्षण लक्ष्य फ़ॉर्मेट की क्षमताओं पर निर्भर करता है। PBR मैटेरियल स्वाभाविक रूप से glTF और GLB आउटपुट में मैप होते हैं।.
ट्रांसफ़ॉर्म और स्पैशियल
प्रत्येक Node सीन ग्राफ में एक Transform जो उसके स्थिति, घूर्णन और स्केल को उसके पैरेंट के सापेक्ष परिभाषित करता है।.
लोकल ट्रांसफ़ॉर्म
Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("TestNode");
Transform t = node.getTransform();
t.setTranslation(1, 2, 3); // Position
t.setScale(2, 2, 2); // Uniform scale
t.setEulerAngles(0, 45, 0); // Euler rotation in degrees
ग्लोबल ट्रांसफ़ॉर्म
यह GlobalTransform गणना किया गया वर्ल्ड-स्पेस ट्रांसफ़ॉर्म है, जो पूरे पैरेंट चेन को ध्यान में रखता है। यह केवल-रीड है और स्वतः अपडेट होता है।.
Node parent = scene.getRootNode().createChildNode("Parent");
parent.getTransform().setTranslation(10, 0, 0);
Node child = parent.createChildNode("Child");
child.getTransform().setTranslation(5, 0, 0);
// Child's global position is (15, 0, 0)
GlobalTransform global = child.getGlobalTransform();
यह पैरेंट‑चाइल्ड ट्रांसफ़ॉर्म इनहेरिटेंस 3D इंजन और DCC टूल्स द्वारा उपयोग किए जाने वाले मानक सीन‑ग्राफ पैटर्न का अनुसरण करता है।.
गणित उपयोगिताएँ
लाइब्रेरी में 3D ऑपरेशनों के लिए कोर गणितीय प्रकार शामिल हैं।.
Vector3
स्थिति, दिशा, सामान्य, और रंगों के लिए उपयोग किया जाने वाला तीन-घटक वेक्टर।.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
// Addition
Vector3 sum = Vector3.add(a, b); // (1, 1, 0)
Matrix4
एक 4x4 ट्रांसफ़ॉर्मेशन मैट्रिक्स जो अनुवाद, घूर्णन, और स्केल को एक ही ऑपरेशन में संयोजित करता है।.
Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform
Quaternion
एक घूर्णन प्रतिनिधित्व जो गिम्बल लॉक से बचता है और सुगमता से इंटरपोलेट करता है। Quaternions को ट्रांसफ़ॉर्म सिस्टम द्वारा आंतरिक रूप से उपयोग किया जाता है।.
BoundingBox
स्थानिक क्वेरी, टकराव जांच, और सीन विश्लेषण के लिए एक अक्ष-संरेखित BoundingBox।.
BoundingBox bbox = new BoundingBox();
// BoundingBox can be computed from mesh geometry
ज्ञात सीमाएँ
ध्यान देने योग्य है कि Scene.render() है समर्थित नहीं है FOSS संस्करण में। इसे कॉल करने पर an UnsupportedOperationException.। लाइब्रेरी फ़ाइल-आधारित 3D प्रोसेसिंग के लिए डिज़ाइन की गई है – लोडिंग, ट्रांसफ़ॉर्मिंग, और सेविंग – वास्तविक‑समय रेंडरिंग के बजाय।.
सारांश
Aspose.3D FOSS for Java की मुख्य विशेषताएँ पाँच क्षेत्रों में विभाजित होती हैं:
| क्षेत्र | वर्ग | उद्देश्य |
|---|---|---|
| सीन ग्राफ | Scene, Node, Entity, Mesh, Camera | पदानुक्रमित मॉडल प्रतिनिधित्व |
| फ़ॉर्मेट्स | OBJ, STL, glTF/GLB के लिए लोड/सेव विकल्प; FBX के लिए लोड | फ़ॉर्मेट-निर्पेक्ष I/O |
| मैटेरियल्स | PbrMaterial | सतह उपस्थिति (PBR) |
| रूपांतरण | Transform, GlobalTransform | स्थानिक स्थिति |
| गणित | Vector3, Matrix4, Quaternion, BoundingBox | 3D math primitives |
अगले पोस्ट में, हम व्यावहारिक फ़ॉर्मेट-वार ट्यूटोरियल्स के माध्यम से OBJ, STL, glTF, और FBX को कवर करेंगे, जिसमें विस्तृत लोड और सेव विकल्प शामिल होंगे।.