Cum să salvați scene 3D în Python
Aspose.3D FOSS pentru Python vă permite să salvați o Scene în orice format de ieșire acceptat folosind un singur apel Scene.save(). Detectarea formatului este automată atunci când transmiteți o cale de fișier; pentru opțiuni avansate, cum ar fi ieșirea binară sau încorporarea texturilor, furnizați un obiect de opțiuni de salvare specific formatului.
Ghid pas cu pas
Pasul 1: Instalarea pachetului
Instalați Aspose.3D FOSS din PyPI. Nu sunt necesare biblioteci native.
pip install aspose-3d-fossVersiuni Python acceptate: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Pasul 2: Importarea claselor necesare
Aveți nevoie cel puțin de Scene. Importați exportatorul specific formatului sau clasa de opțiuni de salvare numai când aveți nevoie de un comportament non-implicit.
from aspose.threed import ScenePentru opțiuni specifice formatului:
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, ColladaSaveOptionsPasul 3: Încărcarea unei scene
Încărcați o scenă existentă de pe disc folosind Scene.from_file(). Biblioteca detectează automat formatul sursă din extensia fișierului. Pentru a construi o scenă de la zero, consultați Cum să construiți o plasă în Python.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternativ, deschideți o scenă cu opțiuni explicite prin Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Pasul 4: Salvarea în STL
Apelați Scene.save() cu o cale .stl. În mod implicit, ieșirea este ASCII STL. Pentru a scrie un STL binar (fișier mai mic, fără antet lizibil de om), utilizați 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)Pasul 5: Salvarea în glTF sau GLB
Fișierele GLTF 2.0 pot fi exportate folosind GltfExporter și GltfSaveOptions. Setați binary_mode = True pentru a produce un pachet binar .glb autoconținut; setați binary_mode = False pentru formatul .gltf bazat pe JSON.
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())Pasul 6: Salvarea în FBX
Scenele FBX sunt exportate prin FbxExporter. Utilizați FbxSaveOptions pentru a activa compresia sau pentru a încorpora texturile în fișierul de ieșire.
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)Pasul 7: Salvarea în OBJ sau Collada (DAE)
Pentru OBJ și Collada, transmiteți calea fișierului direct la Scene.save(). Biblioteca detectează formatul din extensie.
# 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)Probleme frecvente și soluții
Fișier de ieșire gol după scene.save()
Aceasta înseamnă de obicei că nodul rădăcină al scenei nu are noduri copil cu geometrie. Verificați că fiecare nod plasă a fost atașat la scene.root_node înainte de a apela save. Verificați len(scene.root_node.child_nodes) după construirea scenei.
AttributeError la construirea geometriei plasei
Clasa Mesh stochează vârfurile ca o listă internă de puncte de control. Pentru modele detaliate de construcție a plasei, consultați articolul Cum să construiți o plasă în Python, care acoperă crearea poligoanelor, elementele de vârf și datele UV.
Ieșirea GLB este mai mare decât era de așteptat
GLB binar încorporează toate datele de geometrie și textură. Dacă GltfSaveOptions.flip_tex_coord_v este setat la True, este inclus un pas suplimentar de inversare a coordonatelor. Setați-l la False dacă nu aveți nevoie de inversarea texturii pe axa V.
Ciclul de import/export FBX pierde materiale
Exportul de material FBX este controlat de FbxSaveOptions.export_legacy_material_properties. Setați aceasta la True pentru a scrie blocuri de material FBX standard pe care instrumentele terțe le pot citi.
Collada DAE nu include materiale
Setați ColladaSaveOptions.enable_materials = True (implicit este False) înainte de exportare.
Întrebări frecvente
Ce formate poate exporta Aspose.3D FOSS pentru Python?
Biblioteca acceptă exportul în: STL, glTF 2.0 (text și GLB binar), FBX, OBJ, Collada (DAE) și 3MF. Detectarea formatului este automată atunci când transmiteți un șir de cale de fișier la Scene.save(); biblioteca citește extensia pentru a selecta exportatorul corect.
Există un API de export prin streaming care evită scrierea pe disc?
Da. GltfExporter.export(scene, stream, options) scrie în orice io.BytesIO sau obiect asemănător unui fișier. Puteți transmite buffer-ul din memorie direct la un răspuns web sau la procesare ulterioară fără a atinge sistemul de fișiere.
Cum convertesc o scenă dintr-un format în altul?
Încărcați scena cu Scene.from_file("input.fbx") și salvați cu scene.save("output.gltf"). Biblioteca gestionează conversia în memorie; nu sunt necesare fișiere intermediare.
Pot salva mai multe sub-scene în fișiere separate?
Accesați scene.sub_scenes pentru a itera peste fiecare sub-scenă, creați un nou obiect Scene, atașați nodurile relevante și apelați save() pe fiecare.
Scene.save() suprascrie fișierele existente în mod silențios?
Da. Biblioteca nu generează o eroare dacă fișierul țintă există deja; îl suprascrie. Adăugați o verificare a existenței fișierului în codul dvs. dacă trebuie să vă protejați împotriva suprascrierilor accidentale.