में परिचय पोस्ट, हमने कवर किया कि 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
नोट: यह Camera class in the Java edition केवल कंस्ट्रक्टर्स के साथ एक न्यूनतम स्टब है। नोड्स से जुड़ी कैमरा एंटिटीज़ हैं लिखी नहीं गई जब glTF या किसी अन्य फ़ॉर्मेट में निर्यात किया जाता है — glTF एक्सपोर्टर केवल प्रोसेस करता है Mesh एंटिटीज़। निर्यातित फ़ाइलों में कैमरा डेटा के संरक्षित रहने पर भरोसा न करें।.
नोट: यह Light क्लास Java संस्करण में उपलब्ध नहीं है। आयातित फ़ाइलों से सीन लाइटिंग डेटा को सामान्य रूप में संग्रहीत किया जाता है। 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) सामग्री मॉडल प्रदान करता है via 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
एक घूर्णन प्रतिनिधित्व जो गिम्बल लॉक से बचाता है और सुगमता से इंटरपोलेट करता है। क्वाटरनियन को ट्रांसफ़ॉर्म सिस्टम द्वारा आंतरिक रूप से उपयोग किया जाता है।.
BoundingBox
स्थानिक क्वेरी, टकराव जांच और सीन विश्लेषण के लिए एक अक्ष-संरेखित बाउंडिंग बॉक्स।.
BoundingBox bbox = new BoundingBox();
// BoundingBox can be constructed directly with min/max Vector3 values
ध्यान दें: Node.getBoundingBox() और Entity.getBoundingBox() अभी तक लागू नहीं किए गए हैं। दोनों एक खाली BoundingBox (सेंटीनेल के साथ Double.MAX_VALUE / Double.MIN_VALUE मान) मेष ज्यामिति की परवाह किए बिना। इस संस्करण में वास्तविक ज्यामिति सीमाओं की गणना करने के लिए इन विधियों का उपयोग न करें।.
ज्ञात सीमाएँ
यह उल्लेखनीय है कि Scene.render() है समर्थित नहीं है FOSS संस्करण में। इसे कॉल करने पर एक UnsupportedOperationException. लाइब्रेरी फ़ाइल-आधारित 3D प्रोसेसिंग के लिए डिज़ाइन की गई है — लोडिंग, ट्रांसफ़ॉर्मिंग, और सेविंग — बजाय रियल‑टाइम रेंडरिंग के।.
सारांश
Aspose.3D FOSS for Java की मुख्य विशेषताएँ पाँच क्षेत्रों में विभाजित होती हैं:
| क्षेत्र | क्लासेस | उद्देश्य |
|---|---|---|
| सीन ग्राफ़ | Scene, Node, Entity, Mesh, Camera | हाइरार्किकल मॉडल प्रतिनिधित्व |
| फ़ॉर्मेट्स | OBJ, STL, glTF/GLB के लिए लोड/सेव विकल्प; FBX के लिए लोड | फ़ॉर्मेट-agnostic I/O |
| मैटेरियल्स | PbrMaterial | सतह उपस्थिति (PBR) |
| ट्रांसफ़ॉर्म्स | Transform, GlobalTransform | स्थानिक स्थिति |
| गणित | Vector3, Matrix4, Quaternion, BoundingBox | 3D math primitives |
अगले पोस्ट में, हम व्यावहारिक फ़ॉर्मेट-वार ट्यूटोरियल्स के माध्यम से चलेंगे, जिसमें OBJ, STL, glTF, और FBX को कवर किया जाएगा, साथ ही विस्तृत लोड और सेव विकल्प प्रदान किए जाएंगे।.