हम खुशी से घोषणा करते हैं कि उपलब्धता के लिए 3D FOSS के लिए जावा - एक मुफ्त, खुले स्रोत पुस्तकालय 3 डी फ़ाइल प्रारूपों के साथ काम करने के लिए जावा अनुप्रयोगों में. एक शुद्ध जावे समाधान के रूप में बनाया बिना मूल निर्भरताओं के, पुस्तके जाव 21 और बाद में चला जाता है, इसे परियोजनाओं और वातावरण की एक विस्तृत श्रृंखला के प्रति सुलभ बनाता है।.
यह पोस्ट इस बात से गुजरती है कि पुस्तकालय क्या प्रदान करता है, कैसे शुरू करें और यहां से कहां जाना है।.
क्या है 3D FOSS के लिए जावा?
Aspose.3D FOSS for Java एक हल्के वजन 3D फ़ाइल प्रसंस्करण लाइब्रेरी है जो नीचे प्रकाशित किया गया है। लाइसेंस के लिए.यह एक दृश्य-ग्राफ एपीआई प्रदान करता है जो आपको कई व्यापक रूप से उपयोग किए जाने वाले प्रारूपों के माध्यम से 3D मॉडल को लोड, निरीक्षण, परिवर्तित और बचाने की अनुमति देता है. पुस्तकालय पूरी तरह से जावा में लिखा गया है और बाहरी मूल या प्लेटफॉर्म-विशिष्ट संरचनाओं की आवश्यकता नहीं है।.
स्रोत कोड GitHub पर उपलब्ध है: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java के लिए
मुख्य उन्नयन
- साफ जावा - कोई JNI, कोई मूल पुस्तकालय, न ही प्लेटफॉर्म प्रतिबंध।.
- जावा 21+ संगत है।.
- लाइसेंस प्राप्त - इसे व्यक्तिगत, वाणिज्यिक या स्वामित्व परियोजनाओं में बिना किसी प्रतिबंध के उपयोग करें।.
- दृश्य-ग्राफ आर्किटेक्चर - एक परिचित पेड़, नोड्स, मशीनों, कैमरों और सामग्री से।.
- बहुआयामी समर्थन - पढ़ना और लिखना OBJ, STL, glTF 2.0, और GLB फ़ाइल; FBX फ़ील्ड पढ़ें।.
जल्दी शुरू करें
Maven स्थापना
अपने आप में निम्नलिखित निर्भरता जोड़ें pom.xml:
<dependency>
<groupId>org.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.5.0</version>
</dependency>आपका पहला रूपांतरण
सबसे सरल उपयोग मामला एक प्रारूप में 3D फ़ाइल लोड करना है और इसे दूसरे में बचाना है. यहाँ OBJ से STL के लिए दो-लाइन रूपांतरण है:
import com.aspose.threed.*;
public class QuickConvert {
public static void main(String[] args) throws Exception {
Scene scene = Scene.fromFile("cube.obj");
scene.save("output.stl");
}
}
के लिए Scene क्लास केंद्रीय प्रवेश बिंदु है. कॉल करें Scene.fromFile() एक फ़ाइल मार्ग के साथ, एक मॉडल लोड करने के लिए, फिर कॉल करें save() लक्ष्य मार्ग के साथ. पुस्तकालय फ़ाइल विस्तार से प्रारूप को डालें.
Scratch से एक दृश्य बनाना
आप प्रोग्राम के माध्यम से दृश्य भी बना सकते हैं:
import com.aspose.threed.*;
public class BuildScene {
public static void main(String[] args) throws Exception {
Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("Box");
Transform t = node.getTransform();
t.setTranslation(1, 2, 3);
scene.save("scene.gltf");
}
}
यह एक नई दृश्य बनाता है, जड़ के नीचे “बॉक्स” नामक एक बच्चे कोड जोड़ता हैं, इसे निर्देशांक (1, 2, 3) में रखा जाता है और परिणाम को glTF फ़ाइल के रूप में निर्यात करता है।.
प्रारूप-विशिष्ट विकल्पों के साथ लोड करें
जब आपको लोड प्रक्रिया पर अधिक नियंत्रण की आवश्यकता होती है, तो प्रत्येक प्रारूप एक समर्पित विकल्प वर्ग प्रदान करता है. उदाहरण के लिए, स्पष्ट विकल्पों के साथ एक STL फ़ाइल लॉगिंग:
import com.aspose.threed.*;
public class LoadWithOptions {
public static void main(String[] args) throws Exception {
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
// Inspect the loaded scene
System.out.println("Root children: "
+ scene.getRootNode().getChildNodes().size());
// Re-export as OBJ
scene.save("part.obj");
}
}
के लिए Scene.fromFile() स्थिर विधि किसी भी प्रकार के लोड विकल्प स्वीकार करता है: ObjLoadOptions, StlLoadOptions, GltfLoadOptions,या FbxLoadOptions.
दृश्य ग्राफ के माध्यम से
एक बार एक दृश्य लोड हो गया है, आप नोड पेड़ की जांच करने या इसकी सामग्री को संशोधित करने के लिए चल सकते हैं:
import com.aspose.threed.*;
public class TraverseScene {
public static void main(String[] args) throws Exception {
Scene scene = Scene.fromFile("model.gltf");
for (Node child : scene.getRootNode().getChildNodes()) {
System.out.println("Node: " + child.getName());
Transform t = child.getTransform();
System.out.println(" Translation: " + t.getTranslation());
Entity entity = child.getEntity();
if (entity instanceof Mesh) {
Mesh mesh = (Mesh) entity;
System.out.println(" Vertices: "
+ mesh.getControlPoints().size());
}
}
}
}
यह पैटर्न डिबगिंग के लिए उपयोगी है, मॉडल सामग्री की रिपोर्ट उत्पन्न करने के बारे में, या फिर से निर्यात करने से पहले दृश्य के हिस्सों को चयनित रूप से संशोधित करने का उपयोग करता है।.
परिवर्तनों का उपयोग करें
3D स्पेस में नोड्स को स्थित करने के लिए, यह किया जाता है Transform प्रत्येक पर वस्तुओं का Node:
import com.aspose.threed.*;
public class TransformExample {
public static void main(String[] args) throws Exception {
Scene scene = new Scene();
Node parent = scene.getRootNode().createChildNode("Parent");
parent.getTransform().setTranslation(10, 0, 0);
Node child = parent.createChildNode("Child");
child.getTransform().setTranslation(5, 0, 0);
child.getTransform().setScale(2, 2, 2);
// Child's world position is (15, 0, 0) due to
// parent-child transform inheritance
scene.save("transformed.gltf");
}
}
परिवर्तन मानक माता-पिता और बच्चे के विरासत मॉडल का पालन करते हैं: एक बच्चे की विश्व अंतरिक्ष स्थिति उसके स्थानीय परिवर्तन का संयोजन है और सभी पूर्वज जड़ तक परिवर्तित होते हैं।.
क्या शामिल है
पुस्तकालय में क्षमताओं का एक केंद्रित सेट है जो 3 डी दृश्य-ग्राफ मॉडल के आसपास डिज़ाइन किया गया है।.
दृश्य ग्राफ
दृश्य चार्ट एपीआई का पीछे है. प्रत्येक 3 डी फ़ाइल को एक पेड़ संरचना के रूप में प्रस्तुत किया जाता है:
| क्लास | भूमिका |
|---|---|
Scene | शीर्ष स्तर कंटेनर; दृश्य चार्ट की जड़ |
Node | पेड़ में एक नामित स्थिति; परिवर्तनों और बच्चे के कोड रखता है |
Entity | नोड्स के लिए जुड़े दृश्य वस्तुओं के बारे में अराजक आधार |
Mesh | बहुआयामी भूमध्यसागरी - रस्सी, चेहरे, सामान्य |
Camera | Virtual Camera की परिभाषा |
Transform | एक नोड के लिए स्थानीय अनुवाद, घूर्णन और स्केल |
GlobalTransform | वैश्विक अंतरिक्ष परिवर्तन के लिए कंप्यूटर |
सामग्री
पुस्तकालय एक PBR (शारीरिक रूप से आधारित रेंडरिंग) सामग्री मॉडल प्रदान करता है:
- PbrMaterial - भौतिक आधार पर रेंडर सामग्री के साथ albedo, धातुता, क्रूरता और उत्सर्जन रंग, और पारदर्शिता. यह केवल कंक्रीट सामग्री वर्ग उपलब्ध है जावा संस्करण में।.
मैट्रिक उपयोगिताएं
के लिए com.aspose.threed पैकेज में आवश्यक गणित प्राचीनताओं शामिल हैं:
- Vector3 के बारे में - 3 घटकों के लिए स्थिति, दिशाओं और रंगों के साथ वक्टर।.
- मैट्रिक्स 4 - 4x4 परिवर्तन मैट्रिक्स।.
- Quaternion के बारे में रोटेशन का प्रतिनिधित्व।.
- BoundingBox - अंतरिक्ष पूछताछ के लिए एक्स-अललिंग बंडल बॉक्स।.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)
विकल्पों को लोड और बचाएं
प्रत्येक प्रारूप में एक समर्पित विकल्प वर्ग है जो आपको आयात और निर्यात व्यवहार को नियंत्रित करने की अनुमति देता है:
| प्रारूप | लोड विकल्प | विकल्पों को बचाएं |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| ग्लोबल / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | (केवल आयात के लिए) |
उदाहरण के लिए, एक सुंदर JSON और एक फ्लिपड कोर प्रणाली के साथ glTF निर्यात करने के बारे में:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
समर्थन फ़ॉर्मेट्स
निम्न तालिका उन प्रारूपों को संक्षेप में प्रस्तुत करती है जो Aspose.3D FOSS for Java पढ़ सकते हैं और लिख सकते है।.
| प्रारूप | विस्तार | आयात | निर्यात | नोट्स |
|---|---|---|---|---|
| OBJ | .obj | हाँ | हाँ | MTL सामग्री के साथ |
| STL | .stl | हाँ | हाँ | बाइनरी + ASCII |
| ग्लोबल 2.0 | .gltf | हाँ | हाँ | JSON प्रारूप |
| GLB | .glb | हाँ | हाँ | GltfSaveOptions के माध्यम से बाइनरी glTF |
| FBX | .fbx | हाँ | नहीं | केवल आयात |
OBJ, STL, glTF और GLB दोनों लोड और बचत का समर्थन करते हैं. FBX केवल आयात के लिए समर्थित है।.
चयन के लिए प्रारूप गाइड
सही प्रारूप का चयन आपके उपयोग के मामले पर निर्भर करता है:
- OBJ यह आदर्श है जब आपको 3D टूलों के माध्यम से अधिकतम संगतता की आवश्यकता होती है. लगभग हर मॉडलिंग एप्लिकेशन को पढ़ने और लिखने में सक्षम बनाता है OBJ. यह मस्च डेटा एक्सचेंज के लिए अच्छी तरह से काम करता है लेकिन केवल साथी एमटीएल फ़ाइलों द्वारा बुनियादी सामग्री जानकारी ले जाता है।.
- STL यह सामग्री या दृश्य दार्शनिक के बिना कच्चे त्रिकोणीय भूमध्यसागरी संग्रहीत करता है, जो बिल्कुल वही है जो स्लाइजर सॉफ्टवेयर की उम्मीद करता हैं. यदि आपका पाइपलाइन एक 3D प्रिंटर पर समाप्त होता है तो STL सरल विकल्प है।.
- ग्लोबल यह वेब और वास्तविक समय 3D के लिए आधुनिक मानक है. यह पीबीआर सामग्री, पूर्ण दृश्य दार्शनिक का समर्थन करता है, और प्रभावी संचार के रूप में डिज़ाइन किया गया है . glTF का उपयोग जब वेब-आधारित दर्शकों का निर्माण करते हैं, तीन.js या Babylon.JS के साथ काम करते हुए, या किसी भी वास्तव में समय रेंडर पाइपलाइन को लक्षित करते थे.
- FBX यह गहराई से गेम विकास और डिजिटल सामग्री बनाने के कार्यप्रवाह में एकीकृत है. यह रियासत डेटा सहित भौतिक और सामग्रियों का समर्थन करता है। Aspose.3D FOSS for Java FBX का समर्थित है केवल आयात - FBX संपत्ति को लोड करने और उन्हें अन्य प्रारूपों में परिवर्तित करने के लिए इसका उपयोग करें।.
ज्ञात सीमाएं
यह ध्यान देने योग्य है कि Scene.render() है समर्थन नहीं इस प्रोजेक्ट को बुलाकर, एक UnsupportedOperationException.पुस्तकालय फ़ाइल-आधारित 3 डी प्रसंस्करण के लिए डिज़ाइन किया गया है - मॉडल को लोड करने, संभालने, परिवर्तित करने और बचाने के बजाय वास्तविक समय में एक डिस्प्ले पर रेंडर करने के।.
खुले स्रोत और लाइसेंस
Aspose.3D FOSS for Java के लिए जारी किया गया है लाइसेंस के लिए.इसका मतलब है कि आप मुक्त हैं:
- पुस्तकालय का उपयोग व्यावसायिक और स्वामित्व वाले अनुप्रयोगों में किया जाता है।.
- अपनी जरूरतों को पूरा करने के लिए स्रोत कोड को बदलना।.
- पुस्तकालय को अपने स्वयं के सॉफ्टवेयर के हिस्से के रूप में वितरित करें।.
कोई रॉयलट शुल्क, उपयोग सीमाएं नहीं हैं और एमआईटी लाइसेंस द्वारा निर्दिष्ट से परे किसी भी आवंटन आवश्यकता नहीं है।.
पूर्ण स्रोत कोड GitHub पर होस्ट किया जाता है, और योगदान स्वागत करते हैं: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java के लिए
सिस्टम आवश्यकताएँ
| आवश्यकताएँ | विवरण |
|---|---|
| Java संस्करण | 21 or later |
| निर्भरता | कोई (शुद्ध जावा) |
| प्लेटफॉर्म | किसी भी प्लेटफॉर्म को चलाने के लिए JVM |
| बनाना उपकरण | मेटा (अनुशंसित) |
शुरू करने के लिए
यहाँ आपके ऊपर उठने और चलने में मदद करने के लिए संसाधन हैं:
- दस्तावेज - व्यापक गाइड और एपीआई पैदल मार्ग उपलब्ध हैं Aspose.3D दस्तावेज साइट.
- ज्ञान आधार - व्यावहारिक कैसे-अनुच्छेद और समस्या हल करने के लिए टिप्स में 3D केबल.
- API संदर्भ - विधि और वर्ग के लिए विस्तृत संदर्भ Aspose.3D API संदर्भ.
- स्रोत कोड - ब्राउज़ करें और योगदान दें GitHub.
- मेट्रो सेंट्रल - पैकेज प्रकाशित किया जाता है जैसे कि
org.aspose:aspose-3d-foss:26.5.0महेन सेंट्रल में।.
सामान्य उपयोग के मामले
यहाँ कुछ व्यावहारिक परिदृश्य हैं जहां Aspose.3D FOSS for Java अच्छी तरह से फिट होता है:
परिवर्तित पाइपलाइनों का आकार
कई टीमों को एक प्रारूप में 3D संपत्ति मिलती है लेकिन उन्हें दूसरे में जरूरत होती है. एक डिजाइन टीम FBX में काम कर सकती है जबकि वेब टीम को glTF की आवश्यकता होती. पुस्तकालय आपको स्वचालित रूपांतरण पाइपलाइन बनाने की अनुमति देता है:
// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("asset.glb", opts);
3D Model Inspection and Validation
अपने अनुप्रयोग में एक 3D संपत्ति को शामिल करने से पहले, आप इसकी सामग्री की पुष्टि करना चाहते हैं - नोड्स की गिनती की जांच करें, भूमेट्री की जाँच करें या यह पुष्ट करें कि अपेक्षित तत्व मौजूद हैं:
Scene scene = Scene.fromFile("model.obj");
int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);
for (Node child : scene.getRootNode().getChildNodes()) {
if (child.getEntity() instanceof Mesh) {
Mesh mesh = (Mesh) child.getEntity();
System.out.println(child.getName() + ": "
+ mesh.getControlPoints().size() + " vertices");
}
}
दृश्य सभा
आप कई मॉडल लोड कर सकते हैं और उन्हें एक ही दृश्य में जोड़ सकते है:
Scene scene = new Scene();
Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");
// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
scene.getRootNode().getChildNodes().add(child);
}
scene.save("assembled.gltf");
Next क्या है
आने वाले पोस्ट में हम कवर करेंगे:
- दृश्य-ग्राफ एपीआई, सामग्री और गणित उपकरणों की मुख्य विशेषताओं में एक गहरा डुबकी।.
- प्रत्येक समर्थित 3D प्रारूप - OBJ, STL, glTF और FBX के साथ काम करने के लिए एक व्यावहारिक गाइड - लोड / बचाव विकल्पों और बैच रूपांतरण पैटर्न सहित।.
तंग रहें, और पुस्तकालय का पता लगाने के लिए स्वतंत्र महसूस करें और GitHub पर अपनी प्रतिक्रिया साझा करें।.