Kaip išsaugoti 3D scenas Python
Aspose.3D FOSS for Python leidžia išsaugoti Scene į bet kurį palaikomą išvesties formatą naudojant vieną Scene.save() kvietimą. Formato aptikimas yra automatinis, kai pateikiate failo kelią; išplėstinėms parinktimoms, tokioms kaip dvejetainė išvestis arba tekstūrų įterpimas, pateikiate formatui specifinį išsaugojimo parinkčių objektą.
Žingsnis po žingsnio vadovas
Žingsnis 1: Įdiekite paketą
Įdiekite Aspose.3D FOSS iš PyPI. Nereikia jokių natūralių bibliotekų.
pip install aspose-3d-fossPalaikomos Python versijos: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Žingsnis 2: Importuoti reikiamas klases
Mažiausiai jums reikia Scene. Importuokite formatui specifinį eksportuotoją arba išsaugojimo parinkčių klasę tik tada, kai jums reikia nestandartinio elgesio.
from aspose.threed import SceneFormatui būdingiems parametrams:
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, ColladaSaveOptionsŽingsnis 3: Įkelti sceną
Įkelkite esamą sceną iš disko naudodami Scene.from_file(). Biblioteka automatiškai aptinka šaltinio formatą pagal failo plėtinį. Norėdami sukurti sceną nuo nulio, žiūrėkite Kaip sukurti tinklelį Python kalba.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternatyviai atidarykite sceną su aiškiomis parinktimis per Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Žingsnis 4: Išsaugoti į STL
Iškviesti Scene.save() su .stl keliu. Pagal numatytuosius nustatymus išvestis yra ASCII STL. Norėdami įrašyti binarinį STL (mažesnį failą, be žmogui skaitomos antraštės) naudokite 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)Žingsnis 5: Išsaugoti kaip glTF arba GLB
GLTF 2.0 failus galima eksportuoti naudojant GltfExporter ir GltfSaveOptions. Nustatykite binary_mode = True, kad sukurtumėte savarankišką .glb binarinį paketą; nustatykite binary_mode = False JSON pagrindu paremtam .gltf formatui.
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())Žingsnis 6: Išsaugoti į FBX
FBX scenos eksportuojamos per FbxExporter. Naudokite FbxSaveOptions, kad įjungtumėte suspaudimą arba įterptumėte tekstūras į išvesties failą.
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)Žingsnis 7: Išsaugoti į OBJ arba Collada (DAE)
OBJ ir Collada atveju tiesiogiai perduokite failo kelią Scene.save(). Biblioteka nustato formatą pagal plėtinį.
# 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)Dažnos problemos ir sprendimai
Tuščias išvesties failas po scene.save()
Tai paprastai reiškia, kad scenos šakninis mazgas neturi vaikų mazgų su geometrija. Patikrinkite, ar kiekvienas tinklelio mazgas buvo prijungtas prie scene.root_node prieš iškviečiant save. Patikrinkite len(scene.root_node.child_nodes) po scenos sukūrimo.
AttributeError kuriant tinklelio geometriją
Klasė Mesh saugo viršūnes kaip vidinį valdymo taškų sąrašą. Išsamiai apie tinklelio kūrimo šablonus žiūrėkite straipsnį Kaip sukurti tinklelį Python kalba, kuriame aptariama daugiakampių kūrimas, viršūnių elementai ir UV duomenys.
GLB išvestis didesnė nei tikėtasi
Binary GLB įterpia visus geometrijos ir tekstūros duomenis. Jei GltfSaveOptions.flip_tex_coord_v yra nustatyta į True, įtraukiamas papildomas koordinatės apvertimo etapas. Nustatykite ją į False, jei jums nereikia V ašies tekstūros apvertimo.
FBX import/export round-trip loses materials
FBX medžiagų eksportą valdo FbxSaveOptions.export_legacy_material_properties. Nustatykite tai į True, kad įrašytumėte standartinius FBX medžiagų blokus, kuriuos gali perskaityti trečiųjų šalių įrankiai.
Collada DAE neįtraukia medžiagų
Nustatykite ColladaSaveOptions.enable_materials = True (pagal numatymą tai yra False) prieš eksportavimą.
Dažnai užduodami klausimai
Kuriuos formatus Aspose.3D FOSS for Python gali eksportuoti?
Biblioteka palaiko eksportavimą į: STL, glTF 2.0 (tekstinį ir binarinį GLB), FBX, OBJ, Collada (DAE) ir 3MF. Formato aptikimas yra automatinis, kai perduodate failo kelio eilutę Scene.save(); biblioteka skaito plėtinį, kad pasirinktų tinkamą eksportuotoją.
Ar yra srautinio eksporto API, kuris išvengia rašymo į diską?
Taip. GltfExporter.export(scene, stream, options) rašo į bet kurį io.BytesIO arba failų tipo objektą. Galite tiesiogiai perduoti atminties buferį į tinklo atsakymą arba tolesnį apdorojimą, nepaliesdami failų sistemos.
Kaip konvertuoti sceną iš vieno formato į kitą?
Įkelkite sceną naudodami Scene.from_file("input.fbx") ir išsaugokite naudodami scene.save("output.gltf"). Biblioteka tvarko konversiją atmintyje; tarpiniai failai nėra reikalingi.
Ar galiu išsaugoti kelias sub‑scenas į atskirus failus?
Pasiekite scene.sub_scenes, kad iteruotumėte per kiekvieną sub‑sceną, sukurkite naują Scene objektą, prijunkite atitinkamus mazgus ir iškvieskite save() kiekvienam.
Ar Scene.save() perrašo esamus failus tyliai?
Taip. Biblioteka nekelia klaidos, jei tikslinis failas jau egzistuoja; ji jį perrašo. Pridėkite failo egzistavimo patikrinimą savo kode, jei reikia apsaugoti nuo netyčinių perrašymų.