Kā saglabāt 3D ainas Python

Kā saglabāt 3D ainas Python

Aspose.3D FOSS for Python ļauj saglabāt Scene jebkurā atbalstītā izvades formātā, izmantojot vienu Scene.save() izsaukumu. Formāta noteikšana ir automātiska, kad nododat faila ceļu; papildu iespējamām opcijām, piemēram, binārai izvadei vai tekstūru iegultšanai, jāsniedz formātam specifisks saglabāšanas opciju objekts.

Solī pa solim rokasgrāmata

1. solis: instalēt pakotni

Instalējiet Aspose.3D FOSS no PyPI. Nav nepieciešamas vietējās bibliotēkas.

pip install aspose-3d-foss

Atbalstītās Python versijas: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.


2. solis: Importēt nepieciešamās klases

Vismaz jums vajag Scene. Importējiet formāta specifisko eksportētāju vai saglabāšanas opciju klasi tikai tad, ja jums ir vajadzīga nepēc noklusējuma uzvedība.

from aspose.threed import Scene

Formāta specifiskām opcijām:

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. solis: Ielādēt ainu

Ielādējiet esošu ainu no diska, izmantojot Scene.from_file(). Bibliotēka automātiski noteic avota formātu no faila paplašinājuma. Lai izveidotu ainu no sākuma, skatiet Kā izveidot Mesh Pythonā.

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

Alternatīvi atveriet ainu ar skaidriem parametriem, izmantojot Scene.open():

from aspose.threed import Scene

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

Solis 4: Saglabāt STL

Izsauciet Scene.save() ar .stl ceļu. Pēc noklusējuma izvade ir ASCII STL. Lai rakstītu bināro STL (mazāks fails, nav cilvēkam lasāma galvene), izmantojiet 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)

5. solis: Saglabāt kā glTF vai GLB

GLTF 2.0 faili var eksportēt, izmantojot GltfExporter un GltfSaveOptions. Iestatiet binary_mode = True, lai izveidotu pašpietiekamu .glb bināro pakotni; iestatiet binary_mode = False JSON balstītajam .gltf formātam.

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. solis: Saglabāt FBX

FBX ainas tiek eksportētas caur FbxExporter. Izmantojiet FbxSaveOptions, lai ieslēgtu kompresiju vai iegultu tekstūras izvades failā.

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)

Solis 7: Saglabāt kā OBJ vai Collada (DAE)

OBJ un Collada gadījumā nododiet faila ceļu tieši Scene.save(). Bibliotēka nosaka formātu no paplašinājuma.

# 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)

Vispārējās problēmas un risinājumi

Tukša izvades fails pēc scene.save() Parasti tas nozīmē, ka ainas saknes mezglam nav bērna mezglu ar ģeometriju. Pārbaudiet, vai katrs režģa mezgls tika pievienots scene.root_node pirms izsaukšanas save. Pārbaudiet len(scene.root_node.child_nodes) pēc ainas izveides.

AttributeError veidojot režģa ģeometriju
Klase Mesh saglabā virsotnes kā iekšējo vadības punktu sarakstu. Lai iegūtu detalizētus režģa būvēšanas modeļus, skatieties rakstu Kā izveidot režģi Python valodā, kas aptver daudzstūra izveidi, virsotņu elementus un UV datus.

GLB izvade ir lielāka nekā gaidīts Binārais GLB iekļauj visus ģeometrijas un tekstūras datus. Ja GltfSaveOptions.flip_tex_coord_v ir iestatīts uz True, tiek iekļauts papildu koordinātu pārkārtošanas posms. Iestatiet to uz False, ja jums nav vajadzīgs V-ass tekstūras pārkārtojums.

FBX importēšanas/eksportēšanas apgriešana zaudē materiālus FBX materiālu eksportu kontrolē FbxSaveOptions.export_legacy_material_properties. Iestatiet to uz True, lai rakstītu standarta FBX materiālu blokus, kurus var nolasīt trešo pušu rīki.

Collada DAE neiekļauj materiālus
Iestatiet ColladaSaveOptions.enable_materials = True (pēc noklusējuma tas ir False) pirms eksportēšanas.

Biežāk uzdotie jautājumi

Kādus formātus Aspose.3D FOSS for Python var eksportēt?

Bibliotēka atbalsta eksportēšanu uz: STL, glTF 2.0 (teksts un binārais GLB), FBX, OBJ, Collada (DAE) un 3MF. Formāta noteikšana ir automātiska, kad nododat faila ceļa virkni uz Scene.save(); bibliotēka lasa paplašinājumu, lai izvēlētos pareizo eksportētāju.

Vai ir pieejama plūsmas eksportēšanas API, kas izvairās no rakstīšanas uz diska?

Jā. GltfExporter.export(scene, stream, options) raksta uz jebkuru io.BytesIO vai faila līdzīgu objektu. Jūs varat nodot atmiņā esošo buferi tieši uz tīmekļa atbildi vai turpmāku apstrādi, nepieskaroties failu sistēmai.

Kā es varu konvertēt ainu no viena formāta uz citu?

Ielādējiet ainu, izmantojot Scene.from_file("input.fbx"), un saglabājiet, izmantojot scene.save("output.gltf"). Bibliotēka veic atmiņā notiekošo konvertēšanu; starpposma faili nav nepieciešami.

Vai es varu saglabāt vairākas apakš‑ainas atsevišķos failos?

Piekļūstiet scene.sub_scenes, lai iterētu caur katru apakšskatu, izveidojiet jaunu Scene objektu, pievienojiet atbilstošos mezglus un izsauciet save() katram.

Vai Scene.save() pārraksta esošos failus klusi?

Jā. Bibliotēka neizsauc kļūdu, ja mērķa fails jau pastāv; tā to pārraksta. Pievienojiet faila eksistences pārbaudi savā kodā, ja jums jāaizsargā pret nejaušu pārrakstīšanu.

Skatīt arī

 Latviešu