Hur man sparar 3D-scener i Python
Aspose.3D FOSS för Python låter dig spara en Scene till alla stödda utgångsformat med hjälp av en enda Scene.save() Formatdetektion är automatiskt när du passerar en filvägen; för avancerade alternativ som binär utgång eller textur inbäddning, ger du ett format-specifik spara-alternativ objekt.
Steg för steg guide
Steg 1: Installera paketet
Installera Aspose.3D FOSS från PyPI. Inga inhemska bibliotek krävs.
pip install aspose-3d-fossStödda versioner av Python: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Steg 2: Import nödvändiga klasser
Minimum du behöver Scene.Importera format-specifik exportör eller spara alternativ klass endast när du behöver icke-default beteende.
from aspose.threed import SceneFör formatspecifika alternativ:
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, ColladaSaveOptionsSteg 3: Ladda upp en scen
Ladda upp en befintlig scen från disken med hjälp av Scene.from_file().Biblioteket upptäcker källformat automatiskt från filändelsen. för att bygga en scen från skraplotter i stället, se Hur man bygger en mesh i Python.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternativt, öppna en scen med uttryckliga alternativ via Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Steg 4: Spara till STL
Ringa till Scene.save() med A .stl Vägen. enligt standard utgången är ASCII STL. För att skriva en binär ST L (minor fil, ingen mänskligt läsbar header) användning 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: Spara till glTF eller GLB
GLTF 2.0 filer kan exporteras med hjälp av GltfExporter och GltfSaveOptions.Sättet binary_mode = True Att producera en självinnehållande .glb binära bundlar; Set binary_mode = False För JSON-baserade .gltf Formatet är.
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())Steg 6: Spara på FBX
inte genomförts:
FbxExporter.save()ochFbxExporter.save_to_stream()upphöjningNotImplementedErrorFBX export är inte tillgänglig i Aspose.3D FOSS för Python just nu.Använd istället GLB, OBJ, STL eller Collada (DAE) format. se Steg 4, 5 och 7 för att arbeta med exportalternativ.
# 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") # STLSteg 7: Spara till OBJ eller Collada (DAE)
För OBJ och Collada, gå filvägen direkt till Scene.save().Biblioteket upptäcker formatet från förlängningen.
# 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)Vanliga problem och fixar
tom utgångsfil efter scene.save() Detta betyder vanligtvis att scenen har inga barn noder med geometri. Kontrollera att varje mesh nod är ansluten till scene.root_node Innan du ringer save.- Kontrollera len(scene.root_node.child_nodes) Efter att ha byggt scenen.
AttributeError När man bygger mesh geometri Den Mesh klassbutiker vertikaler som en intern kontrollpunkt lista. för detaljerade mässa konstruktionsmönster, hänvisa till Hur man bygger en mesh i Python Artikeln som täcker polygan skapelse, vertex element och UV data.
GLB-produktionen är större än förväntat Binär GLB innehåller alla geometriska och texturdata. om GltfSaveOptions.flip_tex_coord_v är satt till True, en extra koordinat-flip pass ingår. ställa in det till False Om du inte behöver V-axis textur flipping.
FBX-exporten är inte tillgänglig i den aktuella utgåvan FbxExporter.save() upphöjning NotImplementedError.FBX import (ladda ner) .fbx filer) fungerar normalt, men export till FBX inte genomförs. Konvertera till GLB, OBJ, STL eller Collada istället.
Collada DAE innehåller inte material Setade ColladaSaveOptions.enable_materials = True (Det är False förhandsvis före export.
Ofta ställda frågor
Vilka format kan Aspose.3D FOSS för Python exportera?
Biblioteket stöder export till: STL, glTF 2.0 (text och binär GLB), OBJ och Collada (DAE). Formatdetektion är automatiskt när du passerar en filvägssträng till Scene.save();biblioteket läser förlängningen för att välja rätt exportör.
Notera:FBX Export är inte genomförts I den nuvarande utgåvan -
FbxExporter.save()upphöjningNotImplementedError.Använd GLB, OBJ, STL eller Collada istället.
Finns det en streaming export API som undviker att skriva till skivan?
Ja ja . GltfExporter.export(scene, stream, options) Skriver till någon io.BytesIO Du kan överföra in-minnesbuffern direkt till en webbsvarning eller vidare bearbetning utan att röra filsystemet.
Hur konverterar jag en scen från ett format till ett annat?
Ladda scenen med Scene.from_file("input.fbx") och spara med scene.save("output.gltf").Biblioteket hanterar in-minneskonvertering; inga mellanhänder behövs.
Kan jag spara flera underscener till separata filer?
Tillgång scene.sub_scenes att iterera över varje underscena, skapa en ny Scene objekt, fästa relevanta noder och ringa save() på var och en.
Gör det Scene.save() Överskriva befintliga filer tyst?
Ja. biblioteket uppstår inte ett fel om målsfilen redan finns; det överskrider den. Lägg till en filexistenscheck i koden om du behöver skydda mot slumpmässiga överskrifter.