Πώς να αποθηκεύσετε 3D σκηνές σε Python
Το Aspose.3D FOSS for Python σάς επιτρέπει να αποθηκεύσετε ένα Scene σε οποιαδήποτε υποστηριζόμενη μορφή εξόδου χρησιμοποιώντας μία μόνο κλήση Scene.save(). Η ανίχνευση μορφής είναι αυτόματη όταν παρέχετε διαδρομή αρχείου· για προχωρημένες επιλογές όπως δυαδική έξοδο ή ενσωμάτωση υφής, παρέχετε ένα αντικείμενο επιλογών αποθήκευσης ειδικό για τη μορφή.
Οδηγός βήμα-βήμα
Βήμα 1: Εγκατάσταση του πακέτου
Εγκαταστήστε το Aspose.3D FOSS από το PyPI. Δεν απαιτούνται εγγενείς βιβλιοθήκες.
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(). Η βιβλιοθήκη εντοπίζει αυτόματα τη μορφή προέλευσης από την επέκταση του αρχείου. Για να δημιουργήσετε μια σκηνή από το μηδέν, δείτε Πώς να δημιουργήσετε ένα Mesh σε 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 για τη μορφή .gltf βασισμένη σε JSON.
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()
Αυτό συνήθως σημαίνει ότι ο ριζικός κόμβος της σκηνής δεν έχει παιδικούς κόμβους με γεωμετρία. Επαληθεύστε ότι κάθε κόμβος πλέγματος (mesh node) έχει προσαρτηθεί στο scene.root_node πριν καλέσετε το save. Ελέγξτε το len(scene.root_node.child_nodes) μετά την κατασκευή της σκηνής.
AttributeError κατά τη δημιουργία γεωμετρίας πλέγματος
Η κλάση Mesh αποθηκεύει τις κορυφές ως εσωτερική λίστα σημείων ελέγχου. Για λεπτομερή μοτίβα κατασκευής πλέγματος, ανατρέξτε στο άρθρο Πώς να δημιουργήσετε ένα πλέγμα σε Python που καλύπτει τη δημιουργία πολύγωνων, τα στοιχεία κορυφών και τα δεδομένα UV.
GLB output is larger than expected
Το δυαδικό GLB ενσωματώνει όλα τα δεδομένα γεωμετρίας και υφής. Εάν GltfSaveOptions.flip_tex_coord_v είναι ορισμένο σε True, περιλαμβάνεται μια επιπλέον διέλευση αντιστροφής συντεταγμένων. Ορίστε το σε False εάν δεν χρειάζεστε αντιστροφή υφής στον άξονα V.
FBX import/export round-trip loses materials
Η εξαγωγή υλικού FBX ελέγχεται από FbxSaveOptions.export_legacy_material_properties. Ορίστε το σε True για να γράψετε τυπικά μπλοκ υλικού FBX που μπορούν να διαβάσουν εργαλεία τρίτων.
Collada DAE δεν περιλαμβάνει υλικά
Ορίστε ColladaSaveOptions.enable_materials = True (είναι False από προεπιλογή) πριν από την εξαγωγή.
Συχνές Ερωτήσεις
Ποια μορφές μπορεί να εξάγει το Aspose.3D FOSS για Python;
Η βιβλιοθήκη υποστηρίζει εξαγωγή σε: STL, glTF 2.0 (text and binary GLB), FBX, OBJ, Collada (DAE), και 3MF. Η ανίχνευση μορφής είναι αυτόματη όταν περνάτε μια συμβολοσειρά διαδρομής αρχείου στο Scene.save()· η βιβλιοθήκη διαβάζει την επέκταση για να επιλέξει τον σωστό εξαγωγέα.
Υπάρχει κάποιο API εξαγωγής ροής που αποφεύγει τη γραφή στο δίσκο;
Ναι. GltfExporter.export(scene, stream, options) γράφει σε οποιοδήποτε io.BytesIO ή αντικείμενο τύπου αρχείου. Μπορείτε να περάσετε το buffer μνήμης απευθείας σε μια απάντηση web ή σε περαιτέρω επεξεργασία χωρίς να αγγίξετε το σύστημα αρχείων.
Πώς μπορώ να μετατρέψω μια σκηνή από μια μορφή σε άλλη;
Φορτώστε τη σκηνή με Scene.from_file("input.fbx") και αποθηκεύστε με scene.save("output.gltf"). Η βιβλιοθήκη διαχειρίζεται τη μετατροπή στη μνήμη· δεν απαιτούνται ενδιάμεσα αρχεία.
Μπορώ να αποθηκεύσω πολλαπλές υπο-σκηνές σε ξεχωριστά αρχεία;
Πρόσβαση scene.sub_scenes για επανάληψη σε κάθε υπο-σκηνή, δημιουργία ενός νέου αντικειμένου Scene, σύνδεση των σχετικών κόμβων και κλήση του save() σε καθένα.
Το Scene.save() αντικαθιστά υπάρχοντα αρχεία σιωπηρά;
Ναι. Η βιβλιοθήκη δεν προκαλεί σφάλμα εάν το αρχείο προορισμού υπάρχει ήδη· το αντικαθιστά. Προσθέστε έναν έλεγχο ύπαρξης αρχείου στον κώδικά σας εάν χρειάζεται να προστατεύσετε από τυχαίες αντικαταστάσεις.