Ako uložiť 3D scény v Pythone

Ako uložiť 3D scény v Pythone

Aspose.3D FOSS for Python vám umožňuje uložiť Scene do akéhokoľvek podporovaného výstupného formátu pomocou jedného volania Scene.save(). Detekcia formátu je automatická, keď zadáte cestu k súboru; pre pokročilé možnosti, ako je binárny výstup alebo vkladanie textúr, poskytnete objekt špecifických možností ukladania pre daný formát.

Sprievodca krok za krokom

Krok 1: Nainštalovať balík

Nainštalujte Aspose.3D FOSS z PyPI. Nie sú potrebné natívne knižnice.

pip install aspose-3d-foss

Podporované verzie Pythonu: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.


Krok 2: Importovať požadované triedy

Minimálne potrebujete Scene. Importujte exportér špecifický pre formát alebo triedu save-options iba vtedy, keď potrebujete neštandardné správanie.

from aspose.threed import Scene

Pre možnosti špecifické pre 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, ColladaSaveOptions

Krok 3: Načítať scénu

Načítajte existujúcu scénu z disku pomocou Scene.from_file(). Knižnica automaticky rozpozná zdrojový formát podľa prípony súboru. Ak chcete namiesto toho vytvoriť scénu od začiatku, pozrite si Ako zostaviť sieť v Pythone.

# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")

Alternatívne otvorte scénu s explicitnými možnosťami pomocou Scene.open():

from aspose.threed import Scene

scene = Scene()
scene.open("input.fbx")

Krok 4: Uložiť do STL

Zavolajte Scene.save() s .stl cestou. V predvolenom nastavení je výstup ASCII STL. Ak chcete zapísať binárny STL (menší súbor, žiadna čitateľná hlavička), použite 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žiť do glTF alebo GLB

Súbory GLTF 2.0 je možné exportovať pomocou GltfExporter a GltfSaveOptions. Nastavte binary_mode = True na vytvorenie samostatného binárneho balíka .glb; nastavte binary_mode = False pre formát založený na JSON .gltf.

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žiť do FBX

Scény FBX sa exportujú pomocou FbxExporter. Použite FbxSaveOptions na povolenie kompresie alebo vloženie textúr do výstupného súboru.

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žiť do OBJ alebo Collada (DAE)

Pre OBJ a Collada odovzdajte cestu k súboru priamo do Scene.save(). Knižnica rozpozná formát podľa prí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)

Bežné problémy a riešenia

Prázdny výstupný súbor po scene.save()
Toto zvyčajne znamená, že koreňový uzol scény nemá žiadne podriadené uzly s geometriou. Overte, že každý uzol siete bol pripojený k scene.root_node pred volaním save. Skontrolujte len(scene.root_node.child_nodes) po zostavení scény.

AttributeError pri tvorbe geometrie siete
Trieda Mesh ukladá vrcholy ako interný zoznam kontrolných bodov. Pre podrobné vzory konštrukcie mesh, pozrite si článok Ako zostaviť mesh v Pythone, ktorý pokrýva tvorbu polygonov, elementy vrcholov a UV dáta.

GLB output is larger than expected Binárny GLB vkladá všetky geometrické a textúrové dáta. Ak je GltfSaveOptions.flip_tex_coord_v nastavený na True, je zahrnutý extra prechod pre preklopenie súradníc. Nastavte ho na False, ak nepotrebujete preklopenie textúry pozdĺž osi V.

FBX import/export round-trip stráca materiály
Export materiálu FBX je riadený FbxSaveOptions.export_legacy_material_properties. Nastavte to na True, aby sa zapisovali štandardné bloky materiálu FBX, ktoré môžu čítať nástroje tretích strán.

Collada DAE neobsahuje materiály
Nastavte ColladaSaveOptions.enable_materials = True (štandardne je False) pred exportom.

Často kladené otázky

Aké formáty môže Aspose.3D FOSS pre Python exportovať?

Knižnica podporuje export do: STL, glTF 2.0 (text a binárny GLB), FBX, OBJ, Collada (DAE) a 3MF. Detekcia formátu je automatická, keď odovzdáte reťazec cesty k súboru do Scene.save(); knižnica načíta príponu a vyberie správny exportér.

Existuje streaming export API, ktoré sa vyhýba zápisu na disk?

Áno. GltfExporter.export(scene, stream, options) zapisuje do akéhokoľvek io.BytesIO alebo objektu podobného súboru. Môžete odovzdať pamäťový buffer priamo do webovej odpovede alebo ďalšieho spracovania bez zásahu do súborového systému.

Ako môžem previesť scénu z jedného formátu do druhého?

Načítajte scénu pomocou Scene.from_file("input.fbx") a uložte pomocou scene.save("output.gltf"). Knižnica spracováva konverziu v pamäti; nie sú potrebné žiadne medzilehlé súbory.

Môžem uložiť viacero podscén do samostatných súborov?

Pristúpte k scene.sub_scenes, aby ste iterovali cez každú podscénu, vytvorili nový objekt Scene, pripojili príslušné uzly a zavolali save() na každom.

Prepíše Scene.save() existujúce súbory tichým spôsobom?

Áno. Knižnica nevyvolá chybu, ak cieľový súbor už existuje; prepíše ho. Pridajte kontrolu existencie súboru vo vašom kóde, ak potrebujete chrániť pred neúmyselným prepísaním.

Pozri tiež

 Slovenčina