Hoe 3D-scènes opslaan in Python
Aspose.3D FOSS voor Python stelt u in staat een Scene op te slaan naar elk ondersteund uitvoerformaat met één enkele Scene.save()-aanroep. Formaatdetectie is automatisch wanneer u een bestandspad doorgeeft; voor geavanceerde opties zoals binaire uitvoer of textuurinsluiting geeft u een formaatspecifiek save-options-object mee.
Stapsgewijze handleiding
Stap 1: Installeer het pakket
Installeer Aspose.3D FOSS van PyPI. Er zijn geen native bibliotheken vereist.
pip install aspose-3d-fossOndersteunde Python-versies: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Stap 2: Importeer de vereiste klassen
U heeft minimaal Scene nodig. Importeer de formaatspecifieke exporter of save-options-klasse alleen wanneer u niet-standaard gedrag nodig heeft.
from aspose.threed import SceneVoor formaatspecifieke opties:
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, ColladaSaveOptionsStap 3: Laad een scène
Laad een bestaande scène van schijf met Scene.from_file(). De bibliotheek detecteert het bronformaat automatisch op basis van de bestandsextensie. Zie Hoe een mesh bouwen in Python als u een scène vanaf nul wilt opbouwen.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")U kunt ook een scène openen met expliciete opties via Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Stap 4: Opslaan als STL
Roep Scene.save() aan met een .stl-pad. Standaard is de uitvoer ASCII STL. Gebruik StlSaveOptions om een binaire STL te schrijven (kleiner bestand, geen door mensen leesbare header).
# 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)Stap 5: Opslaan als glTF of GLB
GLTF 2.0-bestanden kunnen worden geëxporteerd met GltfExporter en GltfSaveOptions. Stel binary_mode = True in om een zelfstandig .glb-binair pakket te produceren; stel binary_mode = False in voor het JSON-gebaseerde .gltf-formaat.
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())Stap 6: Opslaan als FBX
FBX-scènes worden geëxporteerd via FbxExporter. Gebruik FbxSaveOptions om compressie in te schakelen of texturen in het uitvoerbestand in te sluiten.
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)Stap 7: Opslaan als OBJ of Collada (DAE)
Voor OBJ en Collada geeft u het bestandspad rechtstreeks door aan Scene.save(). De bibliotheek detecteert het formaat op basis van de extensie.
# 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)Veelvoorkomende problemen en oplossingen
Leeg uitvoerbestand na scene.save()
Dit betekent gewoonlijk dat het hoofdknooppunt van de scène geen kindknooppunten met geometrie heeft. Controleer of elk mesh-knooppunt aan scene.root_node is gekoppeld vóór het aanroepen van save. Controleer len(scene.root_node.child_nodes) na het opbouwen van de scène.
AttributeError bij het opbouwen van mesh-geometrie
De klasse Mesh slaat hoekpunten op als een interne lijst van controlepunten. Raadpleeg voor gedetailleerde patronen voor mesh-constructie het artikel Hoe een mesh bouwen in Python, dat de aanmaak van polygonen, hoekpuntelementen en UV-gegevens behandelt.
GLB-uitvoer is groter dan verwacht
Binaire GLB sluit alle geometrie- en textuurgegevens in. Als GltfSaveOptions.flip_tex_coord_v is ingesteld op True, wordt een extra coördinaat-flip-doorgang opgenomen. Stel het in op False als u geen V-as textuurspiegeling nodig heeft.
FBX-import/export-rondrit verliest materialen
FBX-materiaalexport wordt beheerd door FbxSaveOptions.export_legacy_material_properties. Stel dit in op True om standaard FBX-materiaalblokken te schrijven die tools van derden kunnen lezen.
Collada DAE bevat geen materialen
Stel ColladaSaveOptions.enable_materials = True in (standaard is het False) vóór het exporteren.
Veelgestelde vragen
Welke formaten kan Aspose.3D FOSS voor Python exporteren?
De bibliotheek ondersteunt exporteren naar: STL, glTF 2.0 (tekst en binaire GLB), FBX, OBJ, Collada (DAE) en 3MF. Formaatdetectie is automatisch wanneer u een bestandspad-string doorgeeft aan Scene.save(); de bibliotheek leest de extensie om de juiste exporter te selecteren.
Is er een streaming-export-API die schrijven naar schijf vermijdt?
Ja. GltfExporter.export(scene, stream, options) schrijft naar elk io.BytesIO- of bestandsachtig object. U kunt de in-memory buffer rechtstreeks doorgeven aan een webrespons of verdere verwerking zonder het bestandssysteem aan te raken.
Hoe converteer ik een scène van het ene formaat naar het andere?
Laad de scène met Scene.from_file("input.fbx") en sla op met scene.save("output.gltf"). De bibliotheek verwerkt de in-memory conversie; er zijn geen tussenliggende bestanden nodig.
Kan ik meerdere sub-scènes opslaan in afzonderlijke bestanden?
Gebruik scene.sub_scenes om over elke sub-scène te itereren, maak een nieuw Scene-object, koppel de relevante knooppunten en roep op elk save() aan.
Overschrijft Scene.save() bestaande bestanden stilzwijgend?
Ja. De bibliotheek geeft geen fout als het doelbestand al bestaat; het overschrijft het. Voeg een bestandsbestaanscontrole toe in uw code als u zich wilt beschermen tegen onbedoeld overschrijven.