Wie man 3D‑Szenen in Python speichert
Aspose.3D FOSS für Python ermöglicht das Speichern eines Scene in jedes unterstützte Ausgabeformat mit einem einzigen Scene.save()‑Aufruf. Die Formaterkennung erfolgt automatisch, wenn Sie einen Dateipfad übergeben; für erweiterte Optionen wie Binärausgabe oder Textureinbettung stellen Sie ein format‑spezifisches save‑options object bereit.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
Installieren Sie Aspose.3D FOSS von PyPI. Keine nativen Bibliotheken sind erforderlich.
pip install aspose-3d-fossUnterstützte Python-Versionen: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Schritt 2: Erforderliche Klassen importieren
Mindestens benötigen Sie Scene. Importieren Sie den format‑spezifischen Exporter oder die save‑options class nur, wenn Sie ein nicht‑Standardverhalten benötigen.
from aspose.threed import SceneFür formatbezogene Optionen:
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, ColladaSaveOptionsSchritt 3: Szene laden
Laden Sie eine vorhandene Szene von der Festplatte mit Scene.from_file(). Die Bibliothek erkennt das Quellformat automatisch anhand der Dateierweiterung. Um stattdessen eine Szene von Grund auf zu erstellen, siehe Wie man ein Mesh in Python erstellt.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternativ öffnen Sie eine Szene mit expliziten Optionen über Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Schritt 4: Als STL speichern
Rufen Sie Scene.save() mit einem .stl Pfad auf. Standardmäßig ist die Ausgabe ASCII STL. Um ein binäres STL (kleinere Datei, kein menschenlesbarer Header) zu schreiben, verwenden Sie 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)Schritt 5: Als glTF oder GLB speichern
GLTF 2.0-Dateien können mit GltfExporter und GltfSaveOptions exportiert werden. Setzen Sie binary_mode = True, um ein eigenständiges .glb‑Binärpaket zu erzeugen; setzen Sie binary_mode = False für das JSON‑basierte .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())Schritt 6: Als FBX speichern
FBX‑Szenen werden über FbxExporter exportiert. Verwenden Sie FbxSaveOptions, um Kompression zu aktivieren oder Texturen in die Ausgabedatei einzubetten.
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)Schritt 7: Als OBJ oder Collada (DAE) speichern
Für OBJ und Collada übergeben Sie den Dateipfad direkt an Scene.save(). Die Bibliothek erkennt das Format anhand der Erweiterung.
# 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)Häufige Probleme und Lösungen
Leere Ausgabedatei nach scene.save()
Dies bedeutet in der Regel, dass der Wurzelknoten der Szene keine Kindknoten mit Geometrie hat. Vergewissern Sie sich, dass jeder Mesh‑Knoten an scene.root_node angehängt wurde, bevor Sie save aufrufen. Überprüfen Sie len(scene.root_node.child_nodes) nach dem Aufbau der Szene.
AttributeError beim Erstellen von Mesh-Geometrie
Die Mesh-Klasse speichert Scheitelpunkte als interne Kontrollpunktliste. Für detaillierte Muster der Mesh‑Konstruktion siehe den Artikel Wie man ein Mesh in Python erstellt, der die Polygonerstellung, Vertex‑Elemente und UV‑Daten behandelt.
GLB-Ausgabe ist größer als erwartet
Binary GLB bettet alle Geometrie‑ und Texturdaten ein. Wenn GltfSaveOptions.flip_tex_coord_v auf True gesetzt ist, wird ein zusätzlicher Koordinaten‑Flip‑Durchlauf eingeschlossen. Setzen Sie es auf False, wenn Sie das Umdrehen von Texturen entlang der V‑Achse nicht benötigen.
FBX-Import/Export-Rundlauf verliert Materialien
Der FBX-Materialexport wird von FbxSaveOptions.export_legacy_material_properties gesteuert. Setzen Sie dies auf True, um standardmäßige FBX-Materialblöcke zu schreiben, die von Drittanbieter‑Tools gelesen werden können.
Collada DAE enthält keine Materialien
Set ColladaSaveOptions.enable_materials = True (es ist standardmäßig False) vor dem Export.
Häufig gestellte Fragen
Welche Formate kann Aspose.3D FOSS für Python exportieren?
Die Bibliothek unterstützt den Export nach: STL, glTF 2.0 (Text und binäres GLB), FBX, OBJ, Collada (DAE) und 3MF. Die Format‑Erkennung erfolgt automatisch, wenn Sie einen Dateipfad‑String an Scene.save() übergeben; die Bibliothek liest die Erweiterung, um den richtigen Exporter auszuwählen.
Gibt es eine Streaming‑Export‑API, die das Schreiben auf die Festplatte vermeidet?
Ja. GltfExporter.export(scene, stream, options) schreibt in jedes io.BytesIO oder dateiähnliche Objekt. Sie können den In‑Memory‑Puffer direkt an eine Web‑Antwort oder weitere Verarbeitung übergeben, ohne das Dateisystem zu berühren.
Wie konvertiere ich eine Szene von einem Format in ein anderes?
Laden Sie die Szene mit Scene.from_file("input.fbx") und speichern Sie sie mit scene.save("output.gltf"). Die Bibliothek übernimmt die In‑Memory‑Konvertierung; es werden keine Zwischendateien benötigt.
Kann ich mehrere Unterszenen in separate Dateien speichern?
Greifen Sie auf scene.sub_scenes zu, um über jede Unterszene zu iterieren, erstellen Sie ein neues Scene‑Objekt, hängen Sie die relevanten Knoten an und rufen Sie save() für jedes auf.
Überschreibt Scene.save() vorhandene Dateien stillschweigend?
Ja. Die Bibliothek wirft keinen Fehler, wenn die Zieldatei bereits existiert; sie überschreibt sie. Fügen Sie in Ihrem Code eine Prüfung auf Dateiexistenz hinzu, wenn Sie sich vor versehentlichen Überschreibungen schützen möchten.