Sådan gemmer du 3D‑scener i Python
Aspose.3D FOSS for Python giver dig mulighed for at gemme en Scene til ethvert understøttet outputformat ved hjælp af et enkelt Scene.save()‑kald. Formatdetektering er automatisk, når du angiver en filsti; for avancerede indstillinger såsom binært output eller teksturindlejring, leverer du et format‑specifikt gem‑options‑objekt.
Trin-for-trin guide
Trin 1: Installer pakken
Installer Aspose.3D FOSS fra PyPI. Ingen native biblioteker er påkrævet.
pip install aspose-3d-fossUnderstøttede Python-versioner: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Trin 2: Importer nødvendige klasser
Som minimum har du brug for Scene. Importér den format‑specifikke eksportør eller gem‑indstillingsklassen kun, når du har brug for ikke‑standardadfærd.
from aspose.threed import SceneFor format‑specifikke indstillinger:
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, ColladaSaveOptionsTrin 3: Indlæs en scene
Indlæs en eksisterende scene fra disk ved hjælp af Scene.from_file(). Biblioteket registrerer kildeformatet automatisk ud fra filendelsen. For at bygge en scene fra bunden i stedet, se Sådan bygger du et mesh i Python.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternativt kan du åbne en scene med eksplicitte indstillinger via Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Trin 4: Gem til STL
Kald Scene.save() med en .stl sti. Som standard er outputtet ASCII STL. For at skrive en binær STL (mindre fil, ingen menneskelæselig header) brug 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)Trin 5: Gem som glTF eller GLB
GLTF 2.0-filer kan eksporteres ved hjælp af GltfExporter og GltfSaveOptions. Indstil binary_mode = True for at producere en selvstændig .glb binærpakke; indstil binary_mode = False for det JSON-baserede .gltf format.
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())Trin 6: Gem til FBX
FBX‑scener eksporteres via FbxExporter. Brug FbxSaveOptions for at aktivere komprimering eller indlejre 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)Trin 7: Gem som OBJ eller Collada (DAE)
For OBJ og Collada, send filstien direkte til Scene.save(). Biblioteket opdager formatet ud 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)Almindelige problemer og løsninger
Tom outputfil efter scene.save()
Dette betyder normalt, at scenens rotnode ikke har nogen undernoder med geometri. Bekræft, at hver mesh‑node blev vedhæftet scene.root_node før du kalder save. Tjek len(scene.root_node.child_nodes) efter at have bygget scenen.
AttributeError ved opbygning af mesh-geometri
Klassen Mesh gemmer vertexer i en intern kontrolpunktliste. For detaljerede mønstre for mesh‑konstruktion, se artiklen Sådan bygger du et mesh i Python, som dækker polygonoprettelse, vertex‑elementer og UV‑data.
GLB-output er større end forventet
Binær GLB indlejrer al geometri- og teksturdata. Hvis GltfSaveOptions.flip_tex_coord_v er indstillet til True, inkluderes en ekstra koordinat‑flip‑pass. Indstil den til False, hvis du ikke har brug for V‑akse tekstur‑flipping.
FBX import/export round-trip mister materialer
FBX material eksport styres af FbxSaveOptions.export_legacy_material_properties. Sæt dette til True for at skrive standard FBX-materialeblokke, som tredjepartsværktøjer kan læse.
Collada DAE inkluderer ikke materialer
Indstil ColladaSaveOptions.enable_materials = True (det er False som standard) før eksport.
Ofte stillede spørgsmål
Hvilke formater kan Aspose.3D FOSS for Python eksportere?
Biblioteket understøtter eksport til: STL, glTF 2.0 (tekst og binær GLB), FBX, OBJ, Collada (DAE) og 3MF. Formatgenkendelse er automatisk, når du sender en filsti‑streng til Scene.save(); biblioteket læser udvidelsen for at vælge den korrekte eksportør.
Er der et streaming export API, der undgår at skrive til disk?
Ja. GltfExporter.export(scene, stream, options) skriver til enhver io.BytesIO eller fil‑lignende objekt. Du kan videregive den in-memory buffer direkte til et webrespons eller videre behandling uden at røre ved filsystemet.
Hvordan konverterer jeg en scene fra ét format til et andet?
Indlæs scenen med Scene.from_file("input.fbx") og gem med scene.save("output.gltf"). Biblioteket håndterer konverteringen i hukommelsen; ingen mellemliggende filer er nødvendige.
Kan jeg gemme flere under‑scener i separate filer?
Få adgang til scene.sub_scenes for at iterere over hver under‑scene, opret et nyt Scene‑objekt, tilknyt de relevante noder, og kald save() på hver.
Overskriver Scene.save() eksisterende filer uden varsel?
Ja. Biblioteket giver ikke en fejl, hvis målfilen allerede findes; den overskriver den. Tilføj en fil‑eksistenskontrol i din kode, hvis du har brug for at beskytte mod utilsigtet overskrivning.