Hvordan lagre 3D‑scener i Python
Aspose.3D FOSS for Python lar deg lagre en Scene til ethvert støttet utdataformat ved å bruke ett enkelt Scene.save()-kall. Formatgjenkjenning er automatisk når du oppgir en filsti; for avanserte alternativer som binærutdata eller teksturinnbygging, leverer du et formatspesifikt lagringsalternativ-objekt.
Trinn-for-trinn guide
Steg 1: Installer pakken
Installer Aspose.3D FOSS fra PyPI. Ingen native biblioteker kreves.
pip install aspose-3d-fossStøttede Python‑versjoner: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Trinn 2: Importer nødvendige klasser
Som et minimum trenger du Scene. Importer den formatspesifikke eksportøren eller lagringsalternativklassen kun når du trenger ikke‑standard oppførsel.
from aspose.threed import SceneFor formatspesifikke alternativer:
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, ColladaSaveOptionsTrinn 3: Last inn en scene
Last inn en eksisterende scene fra disk ved å bruke Scene.from_file(). Biblioteket oppdager kildeformatet automatisk fra filendelsen. For å bygge en scene fra bunnen av i stedet, se How to Build a Mesh in Python.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternativt, åpne en scene med eksplisitte alternativer via Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Steg 4: Lagre til STL
Kall Scene.save() med en .stl sti. Som standard er utdataen ASCII STL. For å skrive en binær STL (mindre fil, ingen menneskelig lesbar header) bruk 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)Steg 5: Lagre som glTF eller GLB
GLTF 2.0-filer kan eksporteres ved hjelp av GltfExporter og GltfSaveOptions. Angi binary_mode = True for å lage en selvstendig .glb binærpakke; angi binary_mode = False for det JSON-baserte .gltf-formatet.
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())Trinn 6: Lagre til FBX
FBX‑scener eksporteres via FbxExporter. Bruk FbxSaveOptions for å aktivere komprimering eller legge inn teksturer i output‑filen.
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)Steg 7: Lagre til OBJ eller Collada (DAE)
For OBJ og Collada, send filstien direkte til Scene.save(). Biblioteket oppdager formatet fra filendelsen.
# 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)Vanlige problemer og løsninger
Tom utdatafil etter scene.save()
Dette betyr vanligvis at scenens rotnode ikke har noen undernoder med geometri. Verifiser at hver mesh-node ble festet til scene.root_node før du kaller save. Sjekk len(scene.root_node.child_nodes) etter at scenen er bygget.
AttributeError når du bygger mesh-geometri
Klassen Mesh lagrer vertexer som en intern kontrollpunktsliste. For detaljerte mønstre for mesh‑konstruksjon, se artikkelen How to Build a Mesh in Python som dekker polygonopprettelse, vertex‑elementer og UV‑data.
GLB-utdata er større enn forventet
Binær GLB inneholder all geometri- og teksturdata. Hvis GltfSaveOptions.flip_tex_coord_v er satt til True, inkluderes en ekstra koordinat-flipp-pass. Sett den til False hvis du ikke trenger V-akse teksturflipping.
FBX-import/eksport rundtur mister materialer
FBX-materialeksport styres av FbxSaveOptions.export_legacy_material_properties. Sett dette til True for å skrive standard FBX-materialblokker som tredjepartsverktøy kan lese.
Collada DAE inkluderer ikke materialer
Angi ColladaSaveOptions.enable_materials = True (det er False som standard) før eksport.
Ofte stilte spørsmål
Hvilke formater kan Aspose.3D FOSS for Python eksportere?
Biblioteket støtter eksport til: STL, glTF 2.0 (tekst og binær GLB), FBX, OBJ, Collada (DAE) og 3MF. Formatgjenkjenning er automatisk når du sender inn en filsti‑streng til Scene.save(); biblioteket leser filendelsen for å velge riktig eksportør.
Finnes det et streaming‑eksport‑API som unngår å skrive til disk?
Ja. GltfExporter.export(scene, stream, options) skriver til enhver io.BytesIO eller fil‑lignende objekt. Du kan sende den minnebaserte bufferen direkte til et webrespons eller videre behandling uten å berøre filsystemet.
Hvordan konverterer jeg en scene fra ett format til et annet?
Last inn scenen med Scene.from_file("input.fbx") og lagre med scene.save("output.gltf"). Biblioteket håndterer konverteringen i minnet; ingen mellomliggende filer er nødvendig.
Kan jeg lagre flere under‑scener i separate filer?
Få tilgang til scene.sub_scenes for å iterere over hver delscene, opprett et nytt Scene‑objekt, fest de relevante nodene, og kall save() på hver.
Overskriver Scene.save() eksisterende filer stille?
Ja. Biblioteket kaster ikke en feil hvis målfilen allerede finnes; den overskriver den. Legg til en sjekk for fil‑eksistens i koden din hvis du trenger å beskytte mot utilsiktet overskriving.