Kako spremiti 3D scene u Pythonu
Aspose.3D FOSS for Python omogućuje vam spremanje Scene u bilo koji podržani izlazni format pomoću jednog Scene.save() poziva. Otkrivanje formata je automatsko kada proslijedite putanju datoteke; za napredne opcije poput binarnog izlaza ili ugrađivanja tekstura, pružate objekt s opcijama spremanja specifičnim za format.
Vodič korak po korak
Korak 1: Instalirajte paket
Instalirajte Aspose.3D FOSS s PyPI-ja. Nativne biblioteke nisu potrebne.
pip install aspose-3d-fossPodržane Python verzije: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Korak 2: Uvezi potrebne klase
U najmanju ruku trebate Scene. Uvezite format‑specifični exporter ili save‑options class samo kada vam je potrebno ne‑zadano 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 s diska koristeći Scene.from_file(). Biblioteka automatski otkriva izvorni format iz ekstenzije datoteke. Za izgradnju scene od početka, pogledajte Kako izraditi mrežu u Pythonu.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternativno, otvorite scenu s eksplicitnim opcijama putem Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Korak 4: Spremi u STL
Pozovite Scene.save() s .stl putanjom. Zadano je da je izlaz ASCII STL. Za pisanje binarnog STL‑a (manja datoteka, bez čitljivog zaglavlja) upotrijebite 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: Spremi u glTF ili GLB
GLTF 2.0 datoteke mogu se izvesti pomoću GltfExporter i GltfSaveOptions. Postavite binary_mode = True da biste proizveli 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: Spremi u FBX
FBX scene se izvoze putem FbxExporter. Upotrijebite FbxSaveOptions za omogućavanje kompresije ili umetanje tekstura u izlaznu datoteku.
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: Spremi u OBJ ili Collada (DAE)
Za OBJ i Collada, proslijedite putanju datoteke izravno 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 rješenja
Prazna izlazna datoteka nakon scene.save()
Ovo obično znači da korijenski čvor scene nema podčvorove s geometrijom. Provjerite je li svaki čvor mreže pričvršćen na scene.root_node prije pozivanja save. Provjerite len(scene.root_node.child_nodes) nakon izgradnje scene.
AttributeError pri izgradnji geometrije mreže
Klasa Mesh pohranjuje vrhove kao internu listu kontrolnih točaka. Za detaljne obrasce izgradnje mreže, pogledajte članak How to Build a Mesh in Python koji pokriva stvaranje 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čena je dodatna faza preokretanja koordinata. Postavite ga na False ako ne trebate preokretanje teksture po V‑osi.
FBX import/export round-trip loses materials
Izvoz FBX materijala kontrolira FbxSaveOptions.export_legacy_material_properties. Postavite ovo na True kako biste zapisali standardne FBX blokove materijala koje mogu čitati alati trećih strana.
Collada DAE ne uključuje materijale
Postavite ColladaSaveOptions.enable_materials = True (zadano je False) prije izvoza.
Često postavljana pitanja
Koje formate Aspose.3D FOSS za Python može izvesti?
Biblioteka podržava izvoz u: STL, glTF 2.0 (tekst i binarni GLB), FBX, OBJ, Collada (DAE) i 3MF. Detekcija formata je automatska kada proslijedite string putanje datoteke u Scene.save(); biblioteka čita ekstenziju kako bi odabrala ispravan izvoznik.
Postoji li streaming API za izvoz koji izbjegava pisanje na disk?
Da. GltfExporter.export(scene, stream, options) zapisuje u bilo koji io.BytesIO ili objekt sličan datoteci. Možete proslijediti međuspremnik u memoriji izravno u web odgovor ili daljnju obradu bez dodirivanja datotečnog sustava.
Kako pretvoriti scenu iz jednog formata u drugi?
Učitaj scenu s Scene.from_file("input.fbx") i spremi s scene.save("output.gltf"). Biblioteka upravlja pretvorbom u memoriji; nisu potrebni međufajlovi.
Mogu li spremiti više pod‑scena u odvojene datoteke?
Pristupite scene.sub_scenes kako biste iterirali kroz svaku pod‑scenu, stvorili novi Scene objekt, priložili relevantne čvorove i pozvali save() na svakom.
Prepisuje li Scene.save() postojeće datoteke tiho?
Da. Biblioteka ne podiže pogrešku ako odredišna datoteka već postoji; ona je prepisuje. Dodajte provjeru postojanja datoteke u svoj kod ako trebate zaštitu od slučajnih prepisivanja.