Jak uložit 3D scény v Pythonu
Aspose.3D FOSS pro Python vám umožňuje uložit a Scene na jakýkoli podporovaný výstupní formát pomocí jediného Scene.save() Při přepravu cesty souboru je detekce formátu automatická; pro pokročilé možnosti, jako jsou binární výstup nebo vložení textury, dodáte objekt speciálních možnostů ukládání.
Krok za krokem
Krok 1: Nainstalujte balíček
Instalace Aspose.3D FOSS z PyPI. Žádné nativní knihovny nejsou nutné.
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.Importovat exportera specifického formátu nebo třídu možnosti ukládání pouze tehdy, když potřebujete neobsazení předvoleného chování.
from aspose.threed import ScenePro specifické možnosti formátu:
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: Nahrát scénu
Naložit existující scénu z disku pomocí: Scene.from_file().Knihovna automaticky odhalí zdrojový formát z rozšíření souboru. Chcete-li místo toho vytvořit scénu od nuly, viz Jak vytvořit síť v Pythonu?.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternativně otevřete scénu s explicitními možnostmi prostřednictvím Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Krok 4: Uložit do STL
Zavolej . Scene.save() s výjimkou: .stl Path. Vybraný výstup je ASCII STL. Napsat binární ST L (menší soubor, bez lidsky čitelného nadpisu) použití 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 GLT nebo GLB
Soubory GLTF 2.0 lze exportovat pomocí: GltfExporter a) GltfSaveOptions.- Nastavení . binary_mode = True Vytvořit samostatný, nezávislý a integrovaný systém. .glb binární svazek; soubor binary_mode = False pro JSON-základní .gltf formát.
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žit do FBX
Neprovedené:
FbxExporter.save()a)FbxExporter.save_to_stream()zvýšitNotImplementedErrorFBX export není v současné době k dispozici ve funkci Aspose.3D FOSS pro Python.Použijte formáty GLB, OBJ, STL nebo Collada (DAE). viz Kroky 4, 5 a 7 pro pracovní možnosti vývozu.
# The following code raises NotImplementedError in the current release:
# from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
# exporter = FbxExporter()
# exporter.save(scene, "output.fbx", options) # raises NotImplementedError
# Use a supported format instead:
scene.save("output.glb") # binary GLB — recommended
scene.save("output.obj") # Wavefront OBJ
scene.save("output.stl") # STLKrok 7: Uložení na OBJ nebo Collada (DAE)
Pro OBJ a Collada předat cestu souboru přímo na: Scene.save().Knihovna detekuje formát z rozšíření.
# 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)Obvyklé problémy a řešení
Prázdný výstupní soubor po scene.save() To obvykle znamená, že kořenový uzel scény nemá žádné dětské uzly s geometrii. Ověřte si, zda každý zmesný uzl byl připojen k scene.root_node před voláním . save.- Ček. len(scene.root_node.child_nodes) po vytvoření scény.
AttributeError při budování geometrie sítí Úřad pro bezpečnost a ochranu zdraví Mesh pro podrobné vzorce konstrukce okna, viz položku “Společnost” v příloze I. Jak vytvořit síť v Pythonu? Článek, který se zabývá tvorbou mnohonásobků, prvky vrcholu a UV daty.
Výroba GLB je vyšší než očekávalo Binární GLB obsahuje všechny geometrické a texturní údaje. GltfSaveOptions.flip_tex_coord_v je nastaven na: True, je zahrnuto další přechodné číslo pro přepínání souřadnic. Nastavte na False pokud nepotřebujete otočení textury osy V.
Export FBX není k dispozici v aktuálním vydání FbxExporter.save() zvýšení NotImplementedError. FBX import (naložení) .fbx soubory) funguje normálně, ale export na FBX není implementován. Namísto toho převedete do GLB, OBJ, STL nebo Collada.
Collada DAE nezahrnuje materiály. Sestavení: ColladaSaveOptions.enable_materials = True (je to False před vývozem.
Časté otázky
Které formáty může Aspose.3D FOSS pro Python exportovat?
Knihovna podporuje export na: STL, glTF 2.0 (text a binární GLB), OBJ a Collada (DAE). Detekce formátu je automatická, když přeneste řetězci cesty souboru do systému. Scene.save(); knihovna přečte rozšíření, aby vybrala správného vývozce.
Poznámka::Export FBX je: Neprovedené v aktuálním vydání
FbxExporter.save()zvýšeníNotImplementedError.Namísto toho použijte GLB, OBJ, STL nebo Collada.
Existuje streamovací exportní API, která se vyhýbá psaní na disk?
- Ano, jsem.
GltfExporter.export(scene, stream, options)Píše na všechny.io.BytesIOBuffer v paměti můžete přenést přímo na webovou odpověď nebo další zpracování bez dotýkání se souborového systému.
Jak převést scénu z jednoho formátu do druhého?
Nahrát scénu s … Scene.from_file("input.fbx") a ušetřit s scene.save("output.gltf").Knihovna zvládá konverzi v paměti; nejsou potřeba žádné meziběžné soubory.
Můžu uložit několik podstřelek do samostatných souborů?
Přístup scene.sub_scenes aby se opakoval přes každou pod-scénu, vytvořit nový Scene objekt, připojit příslušné uzly a zavolat save() na každém.
- Ano. Scene.save() Tiše přepisovat existující soubory?
Ano. Knihovna nevytváří chybu, pokud cílový soubor již existuje; přepíše jej. Přidejte kontrolu existence souboru do svého kódu, jestliže potřebujete chránit před náhodnými přepsánymi.