Java में 3D मॉडल कैसे डाउनलोड करें
Aspose.3D FOSS for Java एक सरल एपीआई प्रदान करता है 3 डी फ़ाइलों को बिना किसी मूल निर्भरता के खोलने के लिए। Scene आप नोड्स द्रव्यमान पर चल सकते हैं और दृश्य में प्रत्येक मस्जिद के लिए कच्चे भूमेट्री डेटा पढ़ सकते है।.
कदम-दर-चरण गाइड
चरण 1: Maven निर्भरता जोड़ें
अपने Aspose.3D FOSS निर्भरता को जोड़ें pom.xml.कोई अतिरिक्त मूल पुस्तकालय की आवश्यकता नहीं है।.
<dependency>
<groupId>org.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.5.0</version>
</dependency>चरण 2: आवश्यक कक्षाओं को आयात करें
के लिए Scene क्लास सभी 3D डेटा के लिए शीर्ष स्तर का कंटेनर है. इसे आयात करने के साथ-साथ Node, Mesh, और किसी भी प्रारूप-विशिष्ट लोड विकल्प वर्ग की जरूरत है।.
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
import com.aspose.threed.Mesh;
import com.aspose.threed.Entity;
import com.aspose.threed.ObjLoadOptions;
import com.aspose.threed.GltfLoadOptions;
import com.aspose.threed.StlLoadOptions;सभी वर्गों के बीच में रहते हैं com.aspose.threed पैकेज है।.
चरण 3: फ़ाइल लोड करें
स्टैटिक का उपयोग करें Scene.fromFile() किसी भी समर्थित प्रारूप को खोलने का तरीका. पुस्तकालय फ़ाइल एक्सटेंशन से स्वचालित रूप से प्रारंभ करता है.
// Automatic format detection from the file extension
Scene scene = Scene.fromFile("model.obj");इसके अलावा, एक बनाना Scene कॉल और कॉलिंग open().यह उपयोगी है जब आप लोड विकल्पों को पार करना चाहते हैं या स्पष्ट रूप से त्रुटियों का प्रबंधन करते हैं:
Scene scene = new Scene();
scene.open("model.obj");दोनों दृष्टिकोण OBJ, STL (बिना और ASCII), glTF 2.0 / GLB, और FBX फ़ाइलों का समर्थन करते हैं।.
चरण 4: दृश्य नोड्स के माध्यम से पार करें
एक लोड दृश्य एक पेड़ है Node वस्तुओं में जड़ें scene.getRootNode().उपयोग करें getChildNodes() फिर से इटेरेट करें और सभी कोडों का दौरा करें:
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
public class SceneWalker {
public static void main(String[] args) throws Exception {
Scene scene = Scene.fromFile("model.obj");
walkNode(scene.getRootNode(), 0);
}
static void walkNode(Node node, int depth) {
String indent = " ".repeat(depth);
System.out.println(indent + "Node: " + node.getName());
for (Node child : node.getChildNodes()) {
walkNode(child, depth + 1);
}
}
}हर एक Node 0 या अधिक ले जा सकते हैं। Entity वस्तुओं (मशीनें, कैमरा, रोशनी) देखें node.getEntities() किसी भी नोड से जुड़े प्रत्येक इकाई की जांच करने के लिए, या उपयोग करने node.getEntity() मुख्य वस्तु को प्राप्त करने के लिए।.
चरण 5: Vertex और Polygon डेटा तक पहुंच
एक नोड के इकाई को काटें Mesh और कॉल करें getControlPoints() Vertex के लिए और getPolygons() चेहरे के सूचकांक सूची:
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
import com.aspose.threed.Entity;
import com.aspose.threed.Mesh;
Scene scene = Scene.fromFile("model.obj");
for (Node node : scene.getRootNode().getChildNodes()) {
Entity entity = node.getEntity();
if (entity instanceof Mesh) {
Mesh mesh = (Mesh) entity;
System.out.printf("Mesh '%s': %d vertices, %d polygons%n",
node.getName(),
mesh.getControlPoints().size(),
mesh.getPolygonCount());
// First vertex position (Vector4: x, y, z, w)
if (!mesh.getControlPoints().isEmpty()) {
var v = mesh.getControlPoints().get(0);
System.out.printf(" First vertex: (%.4f, %.4f, %.4f)%n", v.x, v.y, v.z);
}
// First polygon: array of control-point indices
if (!mesh.getPolygons().isEmpty()) {
int[] poly = mesh.getPolygons().get(0);
System.out.println(" First polygon indices: " + java.util.Arrays.toString(poly));
}
}
}mesh.getControlPoints() लौटें A List<Vector4> जहां x, y, z स्थिति को लेकर और w यह एक समलैंगिक कोड है (आमतौर पर 1.0)।.
mesh.getPolygons() लौटें A List<int[]> जहां प्रत्येक आरेट एक चेहरे के लिए नियंत्रण बिंदु सूचकांक का आदेश सेट है।.
चरण 6: प्रारूप-विशिष्ट लोड विकल्पों को लागू करें
फ़ाइल को कैसे व्याख्या की जाती है पर एक अच्छी तरह से नियंत्रण के लिए, लोड-आपका उदाहरण पारित करें Scene.fromFile() या scene.open().
फ़ाइलों के लिए - ObjLoadOptions:
import com.aspose.threed.Scene;
import com.aspose.threed.ObjLoadOptions;
ObjLoadOptions options = new ObjLoadOptions();
options.setFlipCoordinateSystem(true); // Convert right-hand Y-up to Z-up
options.setScale(0.01); // Convert centimetres to metres
options.setEnableMaterials(true); // Load the .mtl material file alongside
options.setNormalizeNormal(true); // Normalize all normals to unit length
Scene scene = Scene.fromFile("model.obj", options);GLTF / GLB फ़ाइलों - GltfLoadOptions:
import com.aspose.threed.Scene;
import com.aspose.threed.GltfLoadOptions;
GltfLoadOptions options = new GltfLoadOptions();
options.setFlipCoordinateSystem(true); // Flip the coordinate system if needed
Scene scene = Scene.fromFile("model.glb", options);फ़ाइलों की सूची - StlLoadOptions:
import com.aspose.threed.Scene;
import com.aspose.threed.StlLoadOptions;
StlLoadOptions options = new StlLoadOptions();
options.setFlipCoordinateSystem(true);
options.setRecalculateNormal(true); // Recompute normals from face geometry
Scene scene = Scene.fromFile("model.stl", options);समर्थनित आयात प्रारूपों
| प्रारूप | विस्तार | नोट्स |
|---|---|---|
| OBJ | .obj | Wavefront OBJ; वैकल्पिक .mtl फ़ाइलों की क्षमता; संभव के साथ ObjLoadOptions.setEnableMaterials(true) |
| STL | .stl | ASCII और बाइनरी मोड स्वचालित रूप से पता लगाए जाते हैं |
| ग्लोबल | .gltf, .glb | glTF 2.0; बाइनरी GLB और JSON दोनों समर्थन किया गया है |
| FBX | .fbx | Binary FBX समर्थन |
सामान्य समस्याएं और सुधार
IOException लोड पर - फ़ाइल मार्ग सही है और फ़ोल्डर मौजूद है की जांच करें. विकास के दौरान पूर्ण मार्गों का उपयोग कार्य निर्देशिका अराजकता को खत्म करने के लिए किया जाता है.
NullPointerException एंटीवायरस एक्सेस हर नोड में कोई भूमी नहीं होती. हमेशा गार्ड के साथ रहें node.getEntity() instanceof Mesh कस्टम से पहले, या इटेरेट node.getEntities() कई जुड़े वस्तुओं के साथ नोड्स को संभालने के लिए।.
असंगत प्रणाली को संरेखित करें - यदि लोड मॉडल फ्लिप या घूम रहा दिखाई देता है, तो उपयोग करें setFlipCoordinateSystem(true) (अनुकूलित क्रेडिट के लिए)ObjLoadOptions, GltfLoadOptions,या StlLoadOptions).
दृश्य लोड लेकिन getChildNodes() खाली है — कुछ फ़ाइलों को जड़ नोड के बजाय उप-स्केन में भूमध्यसागरी संग्रहीत करते हैं। scene.getSubScenes() और प्रत्येक उप-स्केन के रूट नोड की जांच करें।.
अक्सर पूछे जाने वाले प्रश्न (FAQ)
मैं किस प्रकार के फ़ॉर्मेट को लोड कर सकता हूं?
OBJ, STL (बिना और ASCII), glTF 2.0 / GLB, और FBX. प्रारूप का पता लगाने के लिए स्वचालित रूप से फ़ाइल विस्तार पर आधारित है जब आप कॉल करते हैं Scene.fromFile().
क्या मैं एक स्ट्रीम से लोड कर सकता हूं?
हाँ।. scene.open(InputStream) और Scene.fromStream(InputStream) दोनों एक जवा को स्वीकार करते हैं। InputStream.आप भी एक पार कर सकते हैं FileFormat जब प्रवाह एक विस्तार नहीं लेता है तो पैरामीटर।.
क्या पुस्तकालय सुरक्षित है?
हर एक Scene उदाहरण स्वतंत्र है और अन्य उदाहरों के साथ परिवर्तनीय स्थिति साझा नहीं करता है।.
मैं हर चेहरे को इटेरेट किए बिना पॉलीगोन गिनती कैसे पढ़ता हूं?
कॉल करें mesh.getPolygonCount() एक सीधे पूरे गिनती के लिए।.