Kuinka tallentaa 3D-kohtaukset Pythonissa
Aspose.3D FOSS for Python antaa sinun tallentaa Scene mihin tahansa tuettuun lähtömuotoon käyttämällä yhtä Scene.save()-kutsua. Muodon tunnistus on automaattinen, kun annat tiedostopolun; edistyneitä vaihtoehtoja, kuten binaarinen tuloste tai tekstuurin upotus, varten toimitat formaattiin perustuvan tallennusasetusten objektin.
Vaiheittainen opas
Vaihe 1: Asenna paketti
Asenna Aspose.3D FOSS PyPI:stä. Natiivikirjastoja ei vaadita.
pip install aspose-3d-fossTuetut Python-versiot: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Vaihe 2: Tarvittavien luokkien tuonti
Vähintään tarvitset Scene. Tuo formaattikohtainen vienti‑ tai tallennusasetusten luokka vain, kun tarvitset ei‑oletuskäyttäytymistä.
from aspose.threed import SceneFormaattikohtaiset asetukset:
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, ColladaSaveOptionsVaihe 3: Lataa kohtaus
Lataa olemassa oleva kohtaus levystä käyttäen Scene.from_file(). Kirjasto havaitsee lähdeformaatin automaattisesti tiedostopäätteestä. Jos haluat sen sijaan rakentaa kohtauksen alusta alkaen, katso Kuinka rakentaa verkko Pythonissa.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Vaihtoehtoisesti avaa kohtaus eksplisiittisillä asetuksilla Scene.open():n kautta:
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Vaihe 4: Tallenna STL-muotoon
Kutsu Scene.save() .stl-polulla. Oletuksena tuloste on ASCII STL. Kirjoittaaksesi binäärisen STL:n (pienempi tiedosto, ei ihmisen luettavissa oleva otsikko) käytä 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)Vaihe 5: Tallenna glTF- tai GLB-muotoon
GLTF 2.0 -tiedostoja voidaan viedä käyttämällä GltfExporter ja GltfSaveOptions. Aseta binary_mode = True tuottamaan itsenäinen .glb binaaripaketti; aseta binary_mode = False JSON-pohjaista .gltf -muotoa varten.
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())Vaihe 6: Tallenna FBX-muotoon
FBX‑kohtaukset viedään FbxExporter-toiminnolla. Käytä FbxSaveOptions-toimintoa ottaaksesi käyttöön pakkaamisen tai upottaaksesi tekstuurit tulostetiedostoon.
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)Vaihe 7: Tallenna OBJ- tai Collada (DAE)
OBJ- ja Collada-tiedostoille syötä tiedostopolku suoraan Scene.save():lle. Kirjasto havaitsee formaatin tiedostopäätteestä.
# 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)Yleisiä ongelmia ja korjauksia
Tyhjä tulostiedosto scene.save() jälkeen
Tämä yleensä tarkoittaa, että scene‑juurisolmussa ei ole lapsisolmuja, joissa on geometriaa. Varmista, että jokainen mesh node on liitetty scene.root_node:een ennen kuin kutsut save. Tarkista len(scene.root_node.child_nodes) scene‑rakentamisen jälkeen.
AttributeError kun rakennetaan verkon geometriaa
Mesh-luokka tallentaa kärjet sisäisen ohjauspisteiden listana. Lisätietoja verkon rakennuskuvioista saat artikkelista Kuinka rakentaa verkko Pythonilla, jossa käsitellään monikulmioiden luomista, kärki‑elementtejä ja UV‑tietoja.
GLB-tuloste on odotettua suurempi
Binäärinen GLB upottaa kaiken geometria- ja tekstuuridatan. Jos GltfSaveOptions.flip_tex_coord_v on asetettu arvoon True, mukaan sisällytetään ylimääräinen koordinaattien kääntövaihe. Aseta se arvoon False, jos et tarvitse V-akselin tekstuurin kääntämistä.
FBX-tuonti/viennin kierros menettää materiaalit
FBX-materiaalin vientiä ohjaa FbxSaveOptions.export_legacy_material_properties. Aseta tämä True:ksi kirjoittaaksesi standardit FBX-materiaalilohkot, jotka kolmannen osapuolen työkalut voivat lukea.
Collada DAE ei sisällä materiaaleja
Aseta ColladaSaveOptions.enable_materials = True (se on oletuksena False) ennen vientiä.
Usein kysytyt kysymykset
Mitä formaatteja Aspose.3D FOSS for Python voi viedä?
Kirjasto tukee vientiä: STL, glTF 2.0 (teksti- ja binäärinen GLB), FBX, OBJ, Collada (DAE) ja 3MF. Muodon tunnistus on automaattinen, kun annat tiedostopolun merkkijonon Scene.save(); kirjasto lukee tiedostopäätteen valitakseen oikean exporter.
Onko olemassa suoratoisto‑vientirajapintaa, joka välttää levylle kirjoittamista?
Kyllä. GltfExporter.export(scene, stream, options) kirjoittaa mihin tahansa io.BytesIO‑ tai tiedostomaiseen objektiin. Voit välittää muistissa olevan puskurin suoraan web‑vastaukseen tai jatkokäsittelyyn koskematta tiedostojärjestelmään.
Kuinka konvertoin kohtauksen yhdestä formaatista toiseen?
Lataa kohtaus Scene.from_file("input.fbx"):lla ja tallenna scene.save("output.gltf"):lla. Kirjasto käsittelee muunnoksen muistissa; välitiedostoja ei tarvita.
Voinko tallentaa useita aliskenaarioita erillisiin tiedostoihin?
Käytä scene.sub_scenes jokaisen alinäytön läpikäymiseen, luo uusi Scene-objekti, liitä asiaankuuluvat solmut ja kutsu save() jokaisessa.
Korvaa Scene.save() olemassa olevat tiedostot hiljaisesti?
Kyllä. Kirjasto ei nosta virhettä, jos kohdetiedosto on jo olemassa; se korvaa sen. Lisää tiedoston olemassaolon tarkistus koodissasi, jos sinun täytyy suojautua tahattomilta korvauksilta.