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-fossDesteklenen 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 SceneBiç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, ColladaSaveOptionsAdı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ştururkenMesh 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çermezColladaSaveOptions.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.