Jak uložit 3D scény v Pythonu
Aspose.3D FOSS pro Python umožňuje uložit Scene do jakéhokoli podporovaného výstupního formátu jediným voláním Scene.save(). Detekce formátu je automatická, když předáte cestu k souboru; pro pokročilé možnosti, jako je binární výstup nebo vkládání textur, poskytnete objekt možností ukládání specifický pro daný formát.
Průvodce krok za krokem
Krok 1: Instalace balíčku
Nainstalujte Aspose.3D FOSS z PyPI. Nevyžadují se žádné nativní knihovny.
pip install aspose-3d-fossPodporované verze Pythonu: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Krok 2: Import požadovaných tříd
Minimálně potřebujete Scene. Importujte exportér specifický pro formát nebo třídu save-options pouze tehdy, když potřebujete nestandardní chování.
from aspose.threed import ScenePro možnosti specifické pro formát:
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, ColladaSaveOptionsKrok 3: Načtení scény
Načtěte existující scénu z disku pomocí Scene.from_file(). Knihovna automaticky detekuje zdrojový formát z přípony souboru. Pokud chcete místo toho vytvořit scénu od začátku, viz Jak sestavit mesh v Pythonu.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Případně otevřete scénu s explicitními možnostmi pomocí Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Krok 4: Uložení do STL
Zavolejte Scene.save() s cestou .stl. Ve výchozím nastavení je výstup ASCII STL. Chcete-li zapsat binární STL (menší soubor, bez čitelné hlavičky), použijte 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)Krok 5: Uložení do glTF nebo GLB
Soubory GLTF 2.0 lze exportovat pomocí GltfExporter a GltfSaveOptions. Nastavte binary_mode = True pro vytvoření samostatného binárního balíčku .glb; nastavte binary_mode = False pro formát .gltf založený na 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())Krok 6: Uložení do FBX
Scény FBX se exportují prostřednictvím FbxExporter. Použijte FbxSaveOptions pro povolení komprese nebo vložení textur do výstupního souboru.
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)Krok 7: Uložení do OBJ nebo Collada (DAE)
Pro OBJ a Collada předejte cestu k souboru přímo do Scene.save(). Knihovna detekuje formát z přípony.
# 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)Běžné problémy a řešení
Prázdný výstupní soubor po scene.save()
To obvykle znamená, že kořenový uzel scény nemá žádné podřízené uzly s geometrií. Ověřte, že každý uzel sítě byl připojen k scene.root_node před voláním save. Zkontrolujte len(scene.root_node.child_nodes) po sestavení scény.
AttributeError při vytváření geometrie sítě
Třída Mesh ukládá vrcholy jako interní seznam kontrolních bodů. Pro podrobné vzory konstrukce sítě viz článek Jak sestavit mesh v Pythonu, který pokrývá vytváření polygonů, prvky vrcholů a UV data.
GLB výstup je větší než očekáváno
Binární GLB vkládá všechna data geometrie a textur. Pokud je GltfSaveOptions.flip_tex_coord_v nastaveno na True, je zahrnutý extra průchod pro překlopení souřadnic. Nastavte ho na False, pokud nepotřebujete překlopení textury podél osy V.
FBX import/export round-trip ztrácí materiály
Export materiálů FBX je řízen pomocí FbxSaveOptions.export_legacy_material_properties. Nastavte toto na True, aby se zapisovaly standardní bloky materiálů FBX, které mohou číst nástroje třetích stran.
Collada DAE neobsahuje materiály
Nastavte ColladaSaveOptions.enable_materials = True (výchozí hodnota je False) před exportem.
Nejčastější dotazy
Jaké formáty může Aspose.3D FOSS pro Python exportovat?
Knihovna podporuje export do: STL, glTF 2.0 (text a binární GLB), FBX, OBJ, Collada (DAE) a 3MF. Detekce formátu je automatická, když předáte řetězec cesty k souboru do Scene.save(); knihovna čte příponu a vybere správný exportér.
Existuje API pro streamovaný export, které se vyhýbá zápisu na disk?
Ano. GltfExporter.export(scene, stream, options) zapisuje do libovolného io.BytesIO nebo objektu podobného souboru. Paměťový buffer můžete předat přímo webové odpovědi nebo dalšímu zpracování bez dotyku souborového systému.
Jak mohu převést scénu z jednoho formátu do jiného?
Načtěte scénu pomocí Scene.from_file("input.fbx") a uložte pomocí scene.save("output.gltf"). Knihovna zpracovává konverzi v paměti; nejsou potřeba žádné mezilehlé soubory.
Mohu uložit více podscén do samostatných souborů?
Přistupte k scene.sub_scenes pro iteraci přes každou podscénu, vytvořte nový objekt Scene, připojte příslušné uzly a zavolejte save() na každém.
Přepíše Scene.save() existující soubory tiše?
Ano. Knihovna nevyvolá chybu, pokud cílový soubor již existuje; přepíše ho. Přidejte do kódu kontrolu existence souboru, pokud potřebujete chránit před nechtěným přepsáním.