Wie man 3D-Szenen in Python speichert
Aspose.3D FOSS für Python lässt Sie eine Scene zu jedem unterstützten Ausgabeformat mit einem einzigen Scene.save() Die Formatserkennung erfolgt automatisch, wenn Sie einen Dateipfad durchlaufen; für fortgeschrittene Optionen wie binäre Ausgabe oder Textur-Einbettung liefern Sie ein formatspezifisches Speicheroptionsobjekt.
Schritt für Schritte
Schritt 1: Installieren des Pakets
Installieren Sie Aspose.3D FOSS von PyPI. Keine nativen Bibliotheken erforderlich.
asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.
Unterstützte Python-Versionen: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Schritt 2: Import der erforderlichen Klassen
Das Mindestmaß, das Sie brauchen. Scene.Importieren Sie die Format-spezifische Exporteur- oder Speicheroptionsklasse nur, wenn Sie ein nicht standardmäßiges Verhalten benötigen.
from aspose.threed import SceneFür formatspezifische 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: Laden Sie eine Szene ein
Laden Sie eine vorhandene Szene von der Festplatte aus mit: Scene.from_file().Die Bibliothek erkennt das Quellformat automatisch aus der Dateierweiterung. Um stattdessen eine Szene von Grund auf zu erstellen, siehe WEB Wie man ein Netz 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: Speichern in STL
Rufen Sie an . Scene.save() mit einem .stl path. Standardmäßig ist die Ausgabe ASCII STL. Um eine binäre ST L (kleinere Datei, kein vom Menschen lesbarer 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: Speichern in glTF oder GLB
GLTF 2.0-Dateien können exportiert werden, indem GltfExporter und . GltfSaveOptions.- Setzt . binary_mode = True Die Kommission hat die .glb binäre Bündel; gesetzt binary_mode = False für die 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: Speichern auf FBX
Nicht umgesetzt:
FbxExporter.save()und .FbxExporter.save_to_stream()ErhöhungNotImplementedErrorFBX-Export ist derzeit nicht in Aspose.3D FOSS für Python verfügbar.Verwenden Sie stattdessen GLB-, OBJ- oder STL-Formate. Sehen Sie Schritte 4, 5 und 7 für die Funktionsmöglichkeiten des Exports.
# The following code raises NotImplementedError in the current release:
# from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
# exporter = FbxExporter()
# exporter.save(scene, "output.fbx", options) # raises NotImplementedError
# Use a supported format instead:
scene.save("output.glb") # binary GLB — recommended
scene.save("output.obj") # Wavefront OBJ
scene.save("output.stl") # STLSchritt 7: Speichern in OBJ oder Collada (DAE)
Für OBJ und Collada wird der Dateipfad direkt an die Scene.save().Die Bibliothek erkennt das Format aus 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 normalerweise, dass der Wurzelknoten der Szene keine Kinderknotze mit Geometrie hat. Überprüfen Sie, ob jeder Mesh-Knoten an die scene.root_node vor dem Anruf . save.- Die Scheckkarte . len(scene.root_node.child_nodes) Nach dem Aufbau der Szene.
AttributeError bei der Erstellung von Maschengeometrie, Die Mesh Die Klasse speichert die Oberpunkte als interne Kontrollpunktliste. Wie man ein Netz in Python erstellt Artikel, der die Erstellung von Polygonen, Winkel-Elemente und UV-Daten behandelt.
GLB-Produktion größer als erwartet Binäre GLB enthält alle Geometrie- und Texturdaten. GltfSaveOptions.flip_tex_coord_v ist auf: True, ein zusätzlicher Koordinaten-Flip Pass ist enthalten. False Wenn Sie nicht brauchen, V-Achse Textur umdrehen.
FBX-Export ist in der aktuellen Version nicht verfügbar FbxExporter.save() Erhöhung NotImplementedError. FBX-Import (Ladezeit) .fbx Dateien) funktioniert normal, aber der Export in FBX wird nicht implementiert. Konvertieren Sie stattdessen zu GLB, OBJ, STL oder Collada.
Collada DAE umfasst keine Materialien. Setz ColladaSaveOptions.enable_materials = True (siehe unten) False Standardmäßig) vor der Ausfuhr.
Häufig gestellte Fragen
Welche Formate kann Aspose.3D FOSS für Python exportieren?
Die Bibliothek unterstützt den Export zu: STL, glTF 2.0 (Text und binäre GLB), OBJ und Collada (DAE). Scene.save();Die Bibliothek liest die Erweiterung, um den richtigen Ausführer auszuwählen.
Anmerkung::FBX-Ausfuhren sind: nicht umgesetzt in der aktuellen Veröffentlichung
FbxExporter.save()ErhöhungNotImplementedError.Verwenden Sie stattdessen GLB, OBJ, STL oder Collada.
Gibt es eine Streaming-Export-API, die das Schreiben auf Festplatte vermeidet?
- Ja, das ist gut.
GltfExporter.export(scene, stream, options)schreibt an jeden.io.BytesIOSie können den Buffer direkt an eine Web-Antwort oder weitere Verarbeitung weitergeben, ohne das Dateisystem zu berühren.
Wie konvertiere ich eine Szene von einem Format in ein anderes?
Die Szene mit … Scene.from_file("input.fbx") und sparen mit scene.save("output.gltf").Die Bibliothek übernimmt die In-Memory-Konvertierung; keine Zwischendateien sind erforderlich.
Kann ich mehrere Unterszenen in separate Dateien speichern?
Zugang zu den Informationen scene.sub_scenes Ich habe eine neue Version des Programms. Scene Objekt, die entsprechenden Knoten anheben und rufen Sie save() auf jeder.
Ist es so ? Scene.save() - Überschreiben Sie bestehende Dateien?
Ja. Die Bibliothek erhebt keinen Fehler, wenn die Zieldatei bereits existiert; sie überschreibt sie. Fügen Sie eine Datei-Existenzprüfung in Ihren Code hinzu, falls Sie vor versehentlichen Überschreibungen schützen müssen.