Hogyan mentse a 3D jeleneteket Pythonban
Az Aspose.3D FOSS for Python lehetővé teszi, hogy egy Scene‑t bármely támogatott kimeneti formátumba mentsen egyetlen Scene.save() hívással. A formátum felismerése automatikus, ha fájlútvonalat ad meg; haladó beállításokhoz, például bináris kimenethez vagy textúra beágyazásához, formátum‑specifikus mentési beállítási objektumot kell megadnia.
Lépésről‑lépésre útmutató
1. lépés: A csomag telepítése
Telepítse az Aspose.3D FOSS-t a PyPI-ról. Nincs szükség natív könyvtárakra.
pip install aspose-3d-fossTámogatott Python verziók: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
2. lépés: Szükséges osztályok importálása
Legalább a Scene szükséges. Importáld a formátum-specifikus exportálót vagy a mentési beállítások osztályt csak akkor, ha nem alapértelmezett viselkedésre van szükséged.
from aspose.threed import SceneFormátum-specifikus beállításokhoz:
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, ColladaSaveOptions3. lépés: Jelenet betöltése
Töltsön be egy meglévő jelenetet a lemezről a Scene.from_file() használatával. A könyvtár automatikusan felismeri a forrásformátumot a fájl kiterjesztéséből. Ha helyette egy jelenetet szeretne a semmiből felépíteni, lásd a Hogyan építsünk hálót Pythonban című útmutatót.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternatívaként nyisson meg egy jelenetet kifejezett beállításokkal a Scene.open() segítségével:
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")4. lépés: Mentés STL-be
Hívja meg a Scene.save() parancsot egy .stl útvonallal. Alapértelmezés szerint a kimenet ASCII STL. Bináris STL (kisebb fájl, nem emberi olvasású fejléc) írásához használja a StlSaveOptions parancsot.
# 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)5. lépés: Mentés glTF vagy GLB formátumba
GLTF 2.0 fájlok exportálhatók a GltfExporter és GltfSaveOptions segítségével. Állítsa be a binary_mode = True-t, hogy önálló .glb bináris csomagot hozzon létre; állítsa be a binary_mode = False-t a JSON‑alapú .gltf formátumhoz.
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())6. lépés: Mentés FBX‑be
Az FBX jelenetek exportálása a FbxExporter segítségével történik. Használja a FbxSaveOptions-t a tömörítés engedélyezéséhez vagy a textúrák beágyazásához a kimeneti fájlba.
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)7. lépés: Mentés OBJ vagy Collada (DAE)
OBJ és Collada esetén adja át a fájl útvonalát közvetlenül a Scene.save()-nek. A könyvtár a kiterjesztés alapján észleli a formátumot.
# 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)Általános problémák és megoldások
Üres kimeneti fájl a scene.save() után
Ez általában azt jelenti, hogy a jelenet gyökércsomópontjának nincs geometriai gyermekcsomópontja. Ellenőrizze, hogy minden hálócsomópontot csatoltak‑e a scene.root_node‑hez, mielőtt meghívná a save‑t. Ellenőrizze a len(scene.root_node.child_nodes)‑t a jelenet felépítése után.
AttributeError háló geometria építésekor
A Mesh osztály a csúcspontokat egy belső vezérlőpont-listában tárolja. A részletes hálóépítési mintákért tekintse meg a How to Build a Mesh in Python cikket, amely a sokszög létrehozását, a csúcselemeket és az UV adatokat tárgyalja.
GLB output is larger than expected
A bináris GLB beágyazza az összes geometriai és textúra adatot. Ha GltfSaveOptions.flip_tex_coord_v értéke True, egy extra koordináta‑fordítási lépés kerül bele. Állítsa False‑re, ha nincs szükség V‑tengelyes textúra fordításra.
FBX import/export körúton elvesznek az anyagok
Az FBX anyag exportálását a FbxSaveOptions.export_legacy_material_properties szabályozza. Állítsa ezt True értékre, hogy szabványos FBX anyagblokkokat írjon, amelyeket a harmadik fél eszközei olvashatnak.
Collada DAE nem tartalmaz anyagokat
Állítsa be a ColladaSaveOptions.enable_materials = True‑t (alapértelmezés szerint False) exportálás előtt.
Gyakran Ismételt Kérdések
Milyen formátumokba exportálhatja az Aspose.3D FOSS for Python?
A könyvtár támogatja az exportálást a következő formátumokba: STL, glTF 2.0 (szöveges és bináris GLB), FBX, OBJ, Collada (DAE), és 3MF. A formátumdetektálás automatikus, ha egy fájlútvonal karakterláncot ad át a Scene.save()-nek; a könyvtár a kiterjesztést olvassa, hogy kiválassza a megfelelő exportálót.
Van olyan streaming export API, amely elkerüli a lemezre írást?
Igen. GltfExporter.export(scene, stream, options) bármilyen io.BytesIO vagy fájl-szerű objektumba ír. A memóriában lévő puffert közvetlenül átadhatja egy webválasznak vagy további feldolgozásnak anélkül, hogy a fájlrendszert érintené.
Hogyan konvertálhatok egy jelenetet az egyik formátumból a másikba?
Töltsd be a jelenetet a Scene.from_file("input.fbx") segítségével, és mentsd el a scene.save("output.gltf")-val. A könyvtár kezeli a memóriában történő konverziót; nincs szükség köztes fájlokra.
Menthetek több aljelenetet külön fájlokba?
Használja a scene.sub_scenes-t az egyes aljelenetek iterálásához, hozzon létre egy új Scene objektumot, csatolja a megfelelő csomópontokat, és hívja meg a save()-t mindegyiken.
Felülírja Scene.save() a meglévő fájlokat csendben?
Igen. A könyvtár nem dob hibát, ha a célfájl már létezik; felülírja. Adj hozzá egy fájl létezésének ellenőrzését a kódodban, ha meg szeretnéd védeni a véletlen felülírásoktól.