Python में 3D सीन को कैसे सहेजें

Python में 3D सीन को कैसे सहेजें

Aspose.3D FOSS for Python आपको एक Scene को किसी भी समर्थित आउटपुट फ़ॉर्मेट में एक ही Scene.save() कॉल का उपयोग करके सहेजने की अनुमति देता है। फ़ॉर्मेट का पता लगाना स्वचालित है जब आप फ़ाइल पथ पास करते हैं; उन्नत विकल्पों जैसे बाइनरी आउटपुट या टेक्सचर एम्बेडिंग के लिए, आप फ़ॉर्मेट-विशिष्ट save-options ऑब्जेक्ट प्रदान करते हैं।

चरण-दर-चरण मार्गदर्शिका

Step 1: पैकेज स्थापित करें

PyPI से Aspose.3D FOSS स्थापित करें। कोई नेटिव लाइब्रेरी आवश्यक नहीं है।

pip install aspose-3d-foss

समर्थित Python संस्करण: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.


चरण 2: आवश्यक क्लासेस आयात करें

न्यूनतम रूप से आपको Scene की आवश्यकता है। केवल तब ही फ़ॉर्मेट‑विशिष्ट एक्सपोर्टर या सेव‑ऑप्शन क्लास को इम्पोर्ट करें जब आपको गैर‑डिफ़ॉल्ट व्यवहार की आवश्यकता हो।

from aspose.threed import Scene

फ़ॉर्मेट-विशिष्ट विकल्पों के लिए:

from aspose.threed.formats.gltf import GltfSaveOptions, GltfExporter
from aspose.threed.formats.stl import StlFormat, StlSaveOptions
from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
from aspose.threed.formats.collada import ColladaExporter, ColladaSaveOptions

चरण 3: एक दृश्य लोड करें

डिस्क से मौजूदा सीन को Scene.from_file() का उपयोग करके लोड करें। लाइब्रेरी फ़ाइल एक्सटेंशन से स्रोत फ़ॉर्मेट को स्वचालित रूप से पहचानती है। इसके बजाय स्क्रैच से सीन बनाने के लिए, देखें Python में मेष कैसे बनाएं

# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")

वैकल्पिक रूप से, स्पष्ट विकल्पों के साथ एक दृश्य खोलें Scene.open() के माध्यम से:

from aspose.threed import Scene

scene = Scene()
scene.open("input.fbx")

चरण 4: STL में सहेजें

Scene.save() को एक .stl पथ के साथ कॉल करें। डिफ़ॉल्ट रूप से आउटपुट ASCII STL होता है। बाइनरी STL (छोटी फ़ाइल, कोई मानव‑पठनीय हेडर नहीं) लिखने के लिए StlSaveOptions का उपयोग करें।

# ASCII STL — format detected from the .stl extension
scene.save("output.stl")

# Binary STL — smaller file size
from aspose.threed.formats.stl import StlFormat, StlSaveOptions

stl_format = StlFormat()
options = stl_format.create_save_options()
options.binary_mode = True
scene.save("output_binary.stl", options)

चरण 5: glTF या GLB में सहेजें

GLTF 2.0 फ़ाइलें GltfExporter और GltfSaveOptions का उपयोग करके निर्यात की जा सकती हैं। binary_mode = True को सेट करें ताकि एक स्व-समाहित .glb बाइनरी बंडल उत्पन्न हो; binary_mode = False को JSON-आधारित .gltf फ़ॉर्मेट के लिए सेट करें।

import io
from aspose.threed.formats.gltf import GltfExporter, GltfSaveOptions

# Text glTF
options = GltfSaveOptions()
options.binary_mode = False
options.file_name = "output.gltf"

exporter = GltfExporter()
with open("output.gltf", "wb") as f:
    stream = io.BytesIO()
    exporter.export(scene, stream, options)
    f.write(stream.getvalue())

# Binary GLB
options_glb = GltfSaveOptions()
options_glb.binary_mode = True
options_glb.file_name = "output.glb"

stream_glb = io.BytesIO()
exporter.export(scene, stream_glb, options_glb)
with open("output.glb", "wb") as f:
    f.write(stream_glb.getvalue())

चरण 6: FBX में सहेजें

FBX दृश्यों को FbxExporter के माध्यम से निर्यात किया जाता है। संपीड़न सक्षम करने या आउटपुट फ़ाइल में टेक्सचर एम्बेड करने के लिए FbxSaveOptions का उपयोग करें।

from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions

options = FbxSaveOptions()
options.enable_compression = True
options.embed_textures = False  # keep textures as separate files

exporter = FbxExporter()
exporter.save(scene, "output.fbx", options)

चरण 7: OBJ या Collada (DAE) में सहेजें

OBJ और Collada के लिए, फ़ाइल पथ को सीधे Scene.save() को पास करें। लाइब्रेरी एक्सटेंशन से फ़ॉर्मेट का पता लगाती है।

# OBJ — format auto-detected from .obj extension
scene.save("output.obj")

# Collada DAE — with material and coordinate-system options
from aspose.threed.formats.collada import ColladaExporter, ColladaSaveOptions

options = ColladaSaveOptions()
options.enable_materials = True
options.flip_coordinate_system = False
options.indented = True

exporter = ColladaExporter()
exporter.export(scene, open("output.dae", "wb"), options)

सामान्य समस्याएँ और समाधान

scene.save() के बाद खाली आउटपुट फ़ाइल
यह आमतौर पर इसका मतलब है कि सीन की रूट नोड में जियोमेट्री वाले कोई चाइल्ड नोड नहीं हैं। save को कॉल करने से पहले यह सत्यापित करें कि प्रत्येक मेष नोड scene.root_node से संलग्न किया गया था। सीन बनाने के बाद len(scene.root_node.child_nodes) की जाँच करें।

AttributeError जब मेष ज्यामिति बनाते हैं
Mesh क्लास वर्टिसेज़ को एक आंतरिक कंट्रोल‑पॉइंट्स सूची के रूप में संग्रहीत करती है। विस्तृत मेष निर्माण पैटर्न के लिए, Python में मेष कैसे बनाएं लेख देखें जिसमें बहुभुज निर्माण, वर्टेक्स तत्व, और UV डेटा शामिल हैं।

GLB आउटपुट अपेक्षा से बड़ा है
बाइनरी GLB सभी ज्यामिति और टेक्सचर डेटा को इनलाइन करता है। यदि GltfSaveOptions.flip_tex_coord_v को True पर सेट किया जाता है, तो एक अतिरिक्त कोऑर्डिनेट‑फ़्लिप पास शामिल किया जाता है। यदि आपको V‑अक्ष टेक्सचर फ़्लिपिंग की आवश्यकता नहीं है तो इसे False पर सेट करें।

FBX आयात/निर्यात राउंड-ट्रिप में सामग्री खो जाती है
FBX सामग्री निर्यात FbxSaveOptions.export_legacy_material_properties द्वारा नियंत्रित होता है। इसे True पर सेट करें ताकि मानक FBX सामग्री ब्लॉकों को लिखा जा सके जिन्हें तृतीय‑पक्ष उपकरण पढ़ सकते हैं।

Collada DAE में सामग्री शामिल नहीं है
निर्यात करने से पहले ColladaSaveOptions.enable_materials = True सेट करें (डिफ़ॉल्ट रूप से यह False है)।

अक्सर पूछे जाने वाले प्रश्न

Aspose.3D FOSS for Python कौन‑से फ़ॉर्मेट निर्यात कर सकता है?

लाइब्रेरी निम्नलिखित फ़ॉर्मैट में निर्यात का समर्थन करती है: STL, glTF 2.0 (टेक्स्ट और बाइनरी GLB), FBX, OBJ, Collada (DAE), और 3MF। फ़ॉर्मैट का पता लगाना स्वचालित है जब आप फ़ाइल‑पाथ स्ट्रिंग को Scene.save() को पास करते हैं; लाइब्रेरी एक्सटेंशन पढ़कर सही एक्सपोर्टर चुनती है।

क्या कोई स्ट्रीमिंग एक्सपोर्ट API है जो डिस्क पर लिखने से बचता है?

हाँ। GltfExporter.export(scene, stream, options) किसी भी io.BytesIO या फ़ाइल‑समतुल्य वस्तु में लिखता है। आप इन‑मेमोरी बफ़र को सीधे वेब प्रतिक्रिया या आगे की प्रोसेसिंग में फ़ाइल‑सिस्टम को छुए बिना पास कर सकते हैं।

मैं एक फ़ॉर्मेट से दूसरे फ़ॉर्मेट में सीन को कैसे परिवर्तित करूँ?

Scene.from_file("input.fbx") के साथ सीन लोड करें और scene.save("output.gltf") के साथ सहेजें। लाइब्रेरी इन‑मेमोरी रूपांतरण को संभालती है; कोई मध्यवर्ती फ़ाइलों की आवश्यकता नहीं है।

क्या मैं कई सब-सीन को अलग-अलग फ़ाइलों में सहेज सकता हूँ?

scene.sub_scenes तक पहुँचें ताकि प्रत्येक सब‑सीन पर इटररेट किया जा सके, एक नया Scene ऑब्जेक्ट बनाएं, संबंधित नोड्स को संलग्न करें, और प्रत्येक पर save() को कॉल करें।

क्या Scene.save() मौजूदा फ़ाइलों को चुपचाप अधिलेखित करता है?

हाँ। यदि लक्ष्य फ़ाइल पहले से मौजूद है तो लाइब्रेरी कोई त्रुटि नहीं उठाती; यह उसे ओवरराइट कर देती है। यदि आपको आकस्मिक ओवरराइट से बचाव करना है तो अपने कोड में फ़ाइल‑उपस्थिति जाँच जोड़ें।

संबंधित देखें

 हिन्दी