सीन ग्राफ के साथ काम करना
सीन ग्राफ के साथ काम करना
हर 3D सीन Aspose.3D में Java के लिए एक पेड़ के रूप में व्यवस्थित किया जाता है Node ऑब्जेक्ट्स।. Scene एक एकल रूट प्रदान करता है — getRootNode() — और ज्योमेट्री, मैटेरियल, तथा ट्रांसफ़ॉर्म का प्रत्येक भाग उस रूट के नीचे एक चाइल्ड या डीसेंडेंट नोड के रूप में रहता है।.
सीन बनाना और रूट नोड तक पहुंचना
Scene स्वचालित रूप से एक रूट नोड के साथ प्रारंभ होता है जिसका नाम है "RootNode":
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
Scene scene = new Scene();
Node root = scene.getRootNode(); // always "RootNode"चाइल्ड नोड्स जोड़ना
Call createChildNode() किसी भी नोड पर एक चाइल्ड जोड़ने के लिए Call करें। इस मेथड के तीन सामान्यतः उपयोग किए जाने वाले ओवरलोड हैं:
import com.aspose.threed.*;
Scene scene = new Scene();
Node root = scene.getRootNode();
// 1. Named node with no entity — useful as a pivot or group container
Node pivot = root.createChildNode("pivot");
// 2. Named node with an entity
Mesh mesh = new Mesh("box");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(1, 0, 0));
mesh.getControlPoints().add(new Vector4(1, 1, 0));
mesh.getControlPoints().add(new Vector4(0, 1, 0));
mesh.createPolygon(0, 1, 2, 3);
Node meshNode = root.createChildNode("box", mesh);
// 3. Named node with entity and material
PbrMaterial mat = new PbrMaterial("red");
mat.setAlbedo(new Vector4(0.8f, 0.2f, 0.2f, 1.0f));
Node decorated = pivot.createChildNode("red_box", mesh, mat);एक अलग से निर्मित नोड को संलग्न करने के लिए, उपयोग करें addChildNode():
Node detached = new Node("standalone");
root.addChildNode(detached);चाइल्ड नोड्स की क्वेरी करना
नाम या इंडेक्स द्वारा सीधे चाइल्ड को खोजें, या सभी सीधे चाइल्ड्स पर इटरेट करें:
// By name — returns null if no direct child has that name
Node found = root.getChild("box");
if (found != null) {
System.out.println("Found: " + found.getName());
}
// By index
Node first = root.getChild(0);
// Iterate all direct children
for (Node child : root.getChildNodes()) {
System.out.println(child.getName());
}getChild(String name) केवल खोजता है प्रत्यक्ष चाइल्ड्स, पूर्ण सबट्री नहीं। उपयोग करें accept() पूरे पेड़ को खोजने के लिए।.
पूरी ट्री को ट्रैवर्स करना
node.accept(NodeVisitor) एक नोड और उसके सभी डीसेंडेंट्स को डेप्थ-फ़र्स्ट क्रम में वॉक करता है। विज़िटर लौटाता है true जारी रखने के लिए या false जल्दी रोकने के लिए:
import com.aspose.threed.NodeVisitor;
// Print every node name in the scene
scene.getRootNode().accept(n -> {
System.out.println(n.getName());
return true; // false would stop traversal
});
// Stop after finding the first node that has an entity
final Node[] found = {null};
scene.getRootNode().accept(n -> {
if (n.getEntity() != null) {
found[0] = n;
return false; // stop walking
}
return true;
});NodeVisitor एक सिंगल-मेथड इंटरफ़ेस है, इसलिए यह Java 8+ में एक लैम्ब्डा स्वीकार करता है।.
दृश्यता और निर्यात बहिष्कार को नियंत्रित करना
नोड्स को हायरार्की से हटाए बिना छिपाया या निर्यात से बाहर किया जा सकता है:
Node ground = root.createChildNode("ground_plane", mesh);
ground.setVisible(false); // hidden in viewport / renderer
Node helperNode = root.createChildNode("debug_arrow", mesh);
helperNode.setExcluded(true); // omitted from all export operationssetVisible(false) एक डिस्प्ले संकेत है।. setExcluded(true) फ़ॉर्मेट की परवाह किए बिना निर्यात किए गए फ़ाइलों में नोड के दिखाई देने से रोकता है।.
एक नोड पर कई एंटिटीज़ को संलग्न करना
एक नोड के पास एक प्राथमिक entity (getEntity() / setEntity()), लेकिन अतिरिक्त entities को … के माध्यम से रख सकता है addEntity(). यह उपयोगी है जब विभिन्न mesh टुकड़े एक ही transform साझा करते हैं:
Mesh body = new Mesh("body");
Mesh wheel = new Mesh("wheel");
Node carNode = root.createChildNode("car");
carNode.addEntity(body);
carNode.addEntity(wheel);
// Retrieve all entities on this node
for (Entity ent : carNode.getEntities()) {
System.out.println(ent.getName());
}नोड्स को मिलाना
merge() सभी बच्चों, entities, और materials को एक source node से target node में ले जाता है। source node खाली रह जाता है:
Node lod0 = root.createChildNode("lod0");
lod0.createChildNode("mesh_high", mesh);
Node lod1 = root.createChildNode("lod1");
lod1.createChildNode("mesh_low", mesh);
// Consolidate lod0 children into lod1
lod1.merge(lod0);
// lod1 now has both mesh_high and mesh_low; lod0 is emptyआगे के कदम
- ट्रांसफ़ॉर्म लागू करना — position, rotate, और scale किसी भी नोड को उसके
Transform - मेष बनाना और उनके साथ काम करना — बहुभुज ज्यामिति बनाएं और उसे नोड्स से जोड़ें
API त्वरित संदर्भ
| सदस्य | विवरण |
|---|---|
scene.getRootNode() | सीन ट्री की जड़; हमेशा scene के बाद मौजूद रहती है new Scene() |
node.createChildNode(name) | बिना entity के एक नामित चाइल्ड नोड बनाएं |
node.createChildNode(name, entity) | एक entity के साथ नामित चाइल्ड नोड बनाएं |
node.createChildNode(name, entity, material) | entity और material के साथ नामित चाइल्ड नोड बनाएं |
node.addChildNode(node) | अलग से निर्मित को संलग्न करें Node |
node.getChild(name) | नाम द्वारा सीधे चाइल्ड को खोजें; लौटाता है null यदि नहीं मिला |
node.getChild(index) | दिए गए इंडेक्स पर प्रत्यक्ष चाइल्ड प्राप्त करें |
node.getChildNodes() | List<Node> सभी प्रत्यक्ष चाइल्ड्स में |
node.accept(visitor) | इस नोड और सभी वंशजों को गहराई‑पहले क्रम में चलाएँ |
node.addEntity(entity) | नोड पर एक अतिरिक्त इकाई संलग्न करें |
node.getEntities() | List<Entity> इस नोड पर सभी इकाइयों का |
node.setVisible(bool) | नोड को दिखाएँ या छिपाएँ |
node.setExcluded(bool) | निर्यात से नोड को शामिल या बाहर रखें |
node.merge(other) | सभी चाइल्ड और इकाइयों को … से स्थानांतरित करें other इस नोड में |