Πώς να αποθηκεύσετε 3D σκηνές στο Python

Πώς να αποθηκεύσετε 3D σκηνές στο Python

Το Aspose.3D FOSS για το Python σας επιτρέπει να αποθηκεύσετε ένα Scene σε οποιαδήποτε μορφή εξόδου που υποστηρίζεται χρησιμοποιώντας ένα μόνο Scene.save() Η ανίχνευση μορφής γίνεται αυτόματα όταν περάσετε ένα μονοπάτι αρχείου. για προηγμένες επιλογές όπως δυαδική έκδοση ή ενσωμάτωση κειμένου, παρέχετε ένα συγκεκριμένο σχήμα-επιλογή αποθήκευσης αντικείμενο.

Βήμα προς βήμα οδηγός

Βήμα 1: Εγκατάσταση του πακέτου

Εγκαταστήστε το Aspose.3D FOSS από την PyPI. Δεν απαιτούνται μητρικές βιβλιοθήκες.

asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.

Υποστηριζόμενες εκδόσεις 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() Με το A .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 Δυοσυνδυασμός - Set binary_mode = False Για το JSON-based .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

Δεν υλοποιήθηκε: FbxExporter.save() και FbxExporter.save_to_stream() ΑΥΞΙΔΑ NotImplementedError FBX εξαγωγή δεν είναι διαθέσιμη στο Aspose.3D FOSS για Python αυτή τη στιγμή.

Χρησιμοποιήστε τις μορφές GLB, OBJ, STL ή Collada (DAE) αντί για αυτό. Βλέπε βήματα 4, 5 και 7 για τις λειτουργικές επιλογές εξαγωγής.

# The following code raises NotImplementedError in the current release:
# from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
# exporter = FbxExporter()
# exporter.save(scene, "output.fbx", options)  # raises NotImplementedError

# Use a supported format instead:
scene.save("output.glb")   # binary GLB — recommended
scene.save("output.obj")   # Wavefront OBJ
scene.save("output.stl")   # STL

Βήμα 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() Αυτό συνήθως σημαίνει ότι το ρίζον κόμβο της σκηνής δεν έχει παιδικά κόμπες με γεωμετρία. Βεβαιωθείτε ότι κάθε κόκκινο κόμμα είναι προσκολλημένο σε scene.root_node Πριν καλέσει save.Ελέγξτε len(scene.root_node.child_nodes) Μετά την κατασκευή της σκηνής.

AttributeError Όταν χτίζουμε γεωμετρία Η Mesh δίδακτρα καταστήματα κάθετα ως εσωτερική λίστα σημείων ελέγχου. για λεπτομερείς δομικές σχέδια, ανατρέξτε στο Πώς να χτίσετε ένα μασχ σε Python Το άρθρο που καλύπτει τη δημιουργία πολυγώνου, τα στοιχεία του σπονδυλίου και τα δεδομένα UV.

Η παραγωγή του GLB είναι μεγαλύτερη από την αναμενόμενη Το Binary GLB περιλαμβάνει όλα τα δεδομένα γεωμετρίας και υφασμάτων. GltfSaveOptions.flip_tex_coord_v Ορίζεται για True, ένα επιπλέον συντονιστικό-flip pass περιλαμβάνεται. False Αν δεν χρειάζεστε κλωστοϋφαντουργία V-axis.

Η εξαγωγή FBX δεν είναι διαθέσιμη στην τρέχουσα έκδοση FbxExporter.save() Αύξηση NotImplementedError.Εισαγωγή FBX (κατεβάστε) .fbx αρχεία) λειτουργεί κανονικά, αλλά η εξαγωγή στο FBX δεν εφαρμόζεται. μετατρέψτε το σε GLB, OBJ, STL ή Collada αντί για αυτό.

Η ΕΣΤ δεν περιλαμβάνει υλικά ΣΕΤΙΔΑ ColladaSaveOptions.enable_materials = True (Αυτό είναι False Πρώτα από την εξαγωγή.

Συχνές ερωτήσεις

Ποια μορφή μπορεί να Aspose.3D FOSS για την εξαγωγή του Python;?

Η βιβλιοθήκη υποστηρίζει την εξαγωγή σε: STL, glTF 2.0 (κείμενο και δυαδικό GLB), OBJ, και Collada (DAE). Scene.save();Η βιβλιοθήκη διαβάζει την επέκταση για να επιλέξει τον σωστό εξαγωγέα.

Σημείωση:Η εξαγωγή του FBX είναι Δεν εφαρμόζεται Στην τρέχουσα έκδοση - FbxExporter.save() Αύξηση NotImplementedError.Χρησιμοποιήστε GLB, OBJ, STL ή Collada αντί.

Υπάρχει μια API εξαγωγής streaming που αποφεύγει τη γραφή στο δίσκο;?

Ναι . GltfExporter.export(scene, stream, options) Γράφει σε οποιονδήποτε io.BytesIO Μπορείτε να μεταφέρετε το μπουφέρ μνήμης απευθείας σε μια απάντηση στο web ή περαιτέρω επεξεργασία χωρίς να αγγίξετε τον αρχείο.

Πώς μπορώ να μετατρέψω μια σκηνή από μία μορφή σε άλλη;?

Κατεβάστε την σκηνή με Scene.from_file("input.fbx") και να σώσει με scene.save("output.gltf").Η βιβλιοθήκη χειρίζεται τη μετατροπή στη μνήμη. δεν απαιτούνται ενδιάμεσοι αρχεία.

Μπορώ να αποθηκεύσω πολλαπλές υποσενάρια σε ξεχωριστά αρχεία;?

Πρόσβαση scene.sub_scenes για να ιταρίσει πάνω από κάθε υποσυνέδριο, δημιουργήστε μια νέα Scene αντικείμενο, προσθέστε τα σχετικά κόμβα και καλέστε save() Σε κάθε ένα.

Η ΚΕ Scene.save() Επεκγραφή των υφιστάμενων αρχείων σιωπηλά;?

Ναι. Η βιβλιοθήκη δεν προκαλεί ένα σφάλμα εάν το αρχείο στόχου ήδη υπάρχει, το υπεργραφεί. Προσθέστε μια επαλήθευση ύπαρξης του αρχείου στον κώδικα σας αν χρειάζεται να προστατεύσετε από τυχαία υπεργραφή.

Δείτε επίσης

 Ελληνικά