Python'da 3D Sahneleri Kaydetme

Python'da 3D Sahneleri Kaydetme

Aspose.3D FOSS for Python, tek bir Scene.save() çağrısı kullanarak bir Scene‘yi desteklenen herhangi bir çıktı formatına kaydetmenizi sağlar. Bir dosya yolu verdiğinizde format algılaması otomatik gerçekleşir; ikili çıktı veya doku gömme gibi gelişmiş seçenekler için format‑özel kaydetme‑seçenekleri nesnesi sağlarsınız.

Adım Adım Kılavuz

Adım 1: Paketi Yükleyin

Aspose.3D FOSS’ı PyPI’dan kurun. Yerel kütüphaneler gerekmez.

pip install aspose-3d-foss

Desteklenen Python sürümleri: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.


Adım 2: Gerekli Sınıfları İçe Aktar

En azından Scene gerekir. Format‑özel dışa aktarıcıyı veya kaydetme‑seçenekleri sınıfını yalnızca varsayılan olmayan davranışa ihtiyacınız olduğunda içe aktarın.

from aspose.threed import Scene

Biçim‑özel seçenekler için:

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

Adım 3: Bir Sahneyi Yükle

Diskten mevcut bir sahneyi Scene.from_file() kullanarak yükleyin. Kütüphane, dosya uzantısından kaynak formatı otomatik olarak algılar. Bunun yerine sıfırdan bir sahne oluşturmak için, Python’da Mesh Nasıl Oluşturulur bölümüne bakın.

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

Alternatif olarak, Scene.open() aracılığıyla açık seçeneklerle bir sahne açın:

from aspose.threed import Scene

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

Adım 4: STL’ye Kaydet

Scene.save()‘yi .stl yolu ile çağırın. Varsayılan olarak çıktı ASCII STL’dir. Binary STL (daha küçük dosya, insan tarafından okunabilir başlık yok) yazmak için StlSaveOptions‘yi kullanın.

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

Adım 5: glTF veya GLB olarak kaydet

GLTF 2.0 dosyaları GltfExporter ve GltfSaveOptions kullanılarak dışa aktarılabilir. binary_mode = True ayarlayarak kendi içinde bütünleşik bir .glb ikili paket oluşturun; binary_mode = False ayarlayarak JSON tabanlı .gltf formatını seçin.

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

Adım 6: FBX’ye Kaydet

FBX sahneleri FbxExporter aracılığıyla dışa aktarılır. Sıkıştırmayı etkinleştirmek veya dokuları çıktı dosyasına gömmek için FbxSaveOptions kullanın.

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)

Adım 7: OBJ veya Collada (DAE) olarak kaydet

OBJ ve Collada için, dosya yolunu doğrudan Scene.save()‘e gönderin. Kütüphane formatı uzantıdan algılar.

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

Yaygın Sorunlar ve Çözümler

scene.save() sonrası boş çıktı dosyası
Bu genellikle sahnenin kök düğümünün geometrik alt düğümleri olmadığını gösterir. save çağrılmadan önce her bir ağ düğümünün scene.root_node‘ye bağlandığını doğrulayın. Sahneyi oluşturduktan sonra len(scene.root_node.child_nodes)‘yi kontrol edin.

AttributeError ağ geometrisi oluştururken
Mesh sınıfı, köşe noktalarını dahili kontrol‑nokta listesi olarak depolar. Ayrıntılı ağ oluşturma desenleri için, çokgen oluşturma, köşe elemanları ve UV verilerini kapsayan Python’da Ağ Nasıl Oluşturulur makalesine bakın.

GLB çıktısı beklenenden daha büyük
Binary GLB tüm geometri ve doku verilerini satır içi ekler. Eğer GltfSaveOptions.flip_tex_coord_v True olarak ayarlanmışsa, ekstra bir koordinat çevirme geçişi eklenir. V‑ekseni doku çevirmesine ihtiyacınız yoksa False olarak ayarlayın.

FBX içe/dışa aktarım turu malzemeleri kaybeder
FBX malzeme dışa aktarımı FbxSaveOptions.export_legacy_material_properties tarafından kontrol edilir. Üçüncü taraf araçların okuyabileceği standart FBX malzeme bloklarını yazmak için bunu True olarak ayarlayın.

Collada DAE malzemeleri içermez
ColladaSaveOptions.enable_materials = True ayarlayın (varsayılan olarak False‘dır) dışa aktarmadan önce.

Sıkça Sorulan Sorular

Aspose.3D FOSS for Python hangi formatları dışa aktarabilir?

Kütüphane şunlara dışa aktarmayı destekler: STL, glTF 2.0 (metin ve ikili GLB), FBX, OBJ, Collada (DAE) ve 3MF. Biçim algılaması, bir dosya yolu dizesini Scene.save()‘e gönderdiğinizde otomatik olarak gerçekleşir; kütüphane doğru dışa aktarıcıyı seçmek için uzantıyı okur.

Disk’e yazmayı önleyen bir akış dışa aktarma API’si var mı?

Evet. GltfExporter.export(scene, stream, options) herhangi bir io.BytesIO veya dosya benzeri nesneye yazar. Bellek içi tamponu doğrudan bir web yanıtına veya daha fazla işleme, dosya sistemine dokunmadan aktarabilirsiniz.

Bir sahneyi bir formattan diğerine nasıl dönüştürürüm?

Sahneyi Scene.from_file("input.fbx") ile yükleyin ve scene.save("output.gltf") ile kaydedin. Kütüphane bellek içi dönüşümü yönetir; ara dosyalara gerek yok.

Birden fazla alt sahneyi ayrı dosyalara kaydedebilir miyim?

scene.sub_scenes‘ye erişerek her alt sahneyi yineleyin, yeni bir Scene nesnesi oluşturun, ilgili düğümleri ekleyin ve her birinde save()‘yi çağırın.

Scene.save() mevcut dosyaları sessizce üzerine yazar mı?

Evet. Kütüphane, hedef dosya zaten mevcutsa bir hata oluşturmaz; üzerine yazar. Kazara üzerine yazılmaları önlemek istiyorsanız kodunuzda dosya varlığı kontrolü ekleyin.

Ayrıca Bakınız

 Türkçe