Hogyan mentse a 3D jeleneteket Pythonban

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-foss

Tá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 Scene

Formá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, ColladaSaveOptions

3. 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.

Lásd még

 Magyar