Hoe 3D-scènes opslaan in Python

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-foss

Ondersteunde 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 Scene

Voor 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, ColladaSaveOptions

Stap 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.

Zie ook

 Nederlands