Kako sačuvati 3D scene u Pythonu
Aspose.3D FOSS for Python vam omogućava da sačuvate Scene u bilo koji podržani izlazni format koristeći jedan Scene.save() poziv. Detekcija formata je automatska kada prosledite putanju do fajla; za napredne opcije kao što su binarni izlaz ili ugrađivanje tekstura, obezbeđujete objekat za opcije čuvanja specifičan za format.
Vodič korak po korak
Korak 1: Instalirajte paket
Instalirajte Aspose.3D FOSS sa PyPI. Nema potrebe za nativnim bibliotekama.
pip install aspose-3d-fossPodržane Python verzije: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Korak 2: Uvoz potrebnih klasa
U najmanju ruku vam je potreban Scene. Uvezite izvoznika specifičnog za format ili klasu opcija za čuvanje samo kada vam je potrebno ne‑podrazumevano ponašanje.
from aspose.threed import SceneZa opcije specifične za format:
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, ColladaSaveOptionsKorak 3: Učitaj scenu
Učitajte postojeću scenu sa diska koristeći Scene.from_file(). Biblioteka automatski otkriva izvorni format na osnovu ekstenzije fajla. Da biste umesto toga izgradili scenu od nule, pogledajte Kako izgraditi mrežu u Pythonu.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternativno, otvorite scenu sa eksplicitnim opcijama putem Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Korak 4: Sačuvaj u STL
Pozovite Scene.save() sa .stl putanjom. Podrazumevano je izlaz ASCII STL. Da biste zapisali binarni STL (manja datoteka, bez čitljivog zaglavlja) koristite 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)Korak 5: Sačuvajte u glTF ili GLB
GLTF 2.0 fajlovi mogu biti izvezeni korišćenjem GltfExporter i GltfSaveOptions. Postavite binary_mode = True da proizvede samostalni .glb binarni paket; postavite binary_mode = False za JSON‑bazirani .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())Korak 6: Sačuvaj u FBX
FBX scene se izvezuju putem FbxExporter. Koristite FbxSaveOptions da omogućite kompresiju ili ugradite teksture u izlazni fajl.
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)Korak 7: Sačuvajte u OBJ ili Collada (DAE)
Za OBJ i Collada, prosledite putanju do fajla direktno u Scene.save(). Biblioteka otkriva format iz ekstenzije.
# 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)Uobičajeni problemi i popravke
Prazna izlazna datoteka nakon scene.save()
Ovo obično znači da korenski čvor scene nema podčvorove sa geometrijom. Proverite da je svaki mesh čvor prikačen na scene.root_node pre pozivanja save. Proverite len(scene.root_node.child_nodes) nakon izgradnje scene.
AttributeError prilikom izgradnje geometrije mreže
Klasa Mesh čuva vrhove kao internu listu kontrolnih tačaka. Za detaljne obrasce izgradnje mreže, pogledajte članak How to Build a Mesh in Python koji pokriva kreiranje poligona, elemente vrhova i UV podatke.
GLB izlaz je veći od očekivanog
Binarni GLB ugrađuje sve geometrijske i teksturne podatke. Ako je GltfSaveOptions.flip_tex_coord_v postavljen na True, uključuje se dodatni prolaz za preokretanje koordinata. Postavite ga na False ako vam nije potrebno preokretanje teksture po V osi.
FBX uvoz/izvoz ciklus gubi materijale
Izvoz FBX materijala kontrolisan je od strane FbxSaveOptions.export_legacy_material_properties. Postavite ovo na True da biste zapisali standardne FBX blokove materijala koje mogu čitati alati trećih strana.
Collada DAE ne uključuje materijale
Postavite ColladaSaveOptions.enable_materials = True (podrazumevano je False) pre izvoza.
Često postavljana pitanja
Koje formate Aspose.3D FOSS za Python može izvoziti?
Biblioteka podržava izvoz u: STL, glTF 2.0 (tekstualni i binarni GLB), FBX, OBJ, Collada (DAE) i 3MF. Detekcija formata je automatska kada prosledite string putanje do fajla Scene.save(); biblioteka čita ekstenziju da izabere odgovarajući izvoznik.
Postoji li streaming export API koji izbegava upisivanje na disk?
Da. GltfExporter.export(scene, stream, options) piše u bilo koji io.BytesIO ili objekat sličan fajlu. Možete proslediti bafer u memoriji direktno u web odgovor ili dalju obradu bez dodirivanja sistema fajlova.
Kako da konvertujem scenu iz jednog formata u drugi?
Učitajte scenu pomoću Scene.from_file("input.fbx") i sačuvajte pomoću scene.save("output.gltf"). Biblioteka upravlja konverzijom u memoriji; nisu potrebni međufajlovi.
Могу ли да сачувам више под‑сцена у одвојене датотеке?
Pristupite scene.sub_scenes da biste iterirali kroz svaku pod‑scenu, kreirali novi Scene objekat, prikačili relevantne čvorove i pozvali save() na svakom.
Da li Scene.save() prepisuje postojeće fajlove tiho?
Da. Biblioteka ne podiže grešku ako ciljna datoteka već postoji; ona je prepisuje. Dodajte proveru postojanja datoteke u vašem kodu ako trebate zaštitu od slučajnih prepisivanja.