Hvordan lagre 3D‑scener i Python

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

Stø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 Scene

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

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

Se også

 Norsk