Biçim Desteği
Aspose.3D FOSS for Python, tek bir bellek içi sahne temsili kullanarak yedi 3D formatını okuyabilir ve yazabilir. Kütüphane, her formatı ortak bir Scene nesne olarak yükler ve bu nesneyi kaydetme sırasında hedef formata geri serileştirir. Bu, OBJ’den yüklenen bir sahnenin doğrudan glTF’ye, ara dönüşüm adımları olmadan kaydedilebileceği anlamına gelir.
Desteklenen Biçimler
| Format | Uzantı | Okuma | Yazma | Seçenekler sınıfı | Notlar |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Evet | Evet | ObjLoadOptions | .mtl malzeme yükleme destekleniyor |
| STL (binary) | .stl | Evet | Evet | StlSaveOptions | Binary ve ASCII okuma; kaydetme varsayılanı binary |
| STL (ASCII) | .stl | Evet | Evet | StlSaveOptions | Gidiş-dönüş doğrulandı |
| glTF 2.0 | .gltf | Evet | Evet | GltfSaveOptions | Tam sahne grafiği, materyaller ve animasyonlar korundu |
| GLB (binary glTF) | .glb | Evet | Evet | GltfSaveOptions | Tek dosyalı ikili konteyner |
| COLLADA | .dae | Evet | Evet | ColladaLoadOptions / ColladaSaveOptions | Sahne hiyerarşisi ve materyaller |
| 3MF | .3mf | Evet | Evet | ThreeMfSaveOptions | Katmanlı imalat formatı |
| FBX | .fbx | Kısmi | Hayır | N/A | Tokenleştirici çalışıyor; tam ayrıştırıcı üzerinde çalışılıyorüretim için hazır değil) |
OBJ Biçimi
Wavefront OBJ, statik ağlar için en yaygın desteklenen değişim formatıdır. Aspose.3D FOSS, geometriyi (köşe noktaları, normaller, UV koordinatları ve çokgen yüzeyler) yükler ve isteğe bağlı olarak eşlik eden .mtl malzeme dosyası.
ObjLoadOptions
| Özellik | Tür | Varsayılan | Açıklama |
|---|---|---|---|
enable_materials | bool | True | Ayrıştır .mtl OBJ başlığı tarafından referans verilen dosya |
flip_coordinate_system | bool | False | Y-yukarı sağ el sisteminden Z-yukarı sağ el sistemine dönüştür |
normalize_normal | bool | True | İçe aktarılan tüm yüzey normallerini birim uzunluğa normalleştir |
scale | float | 1.0 | Tüm köşe konumlarına uygulanan tekdüze ölçek faktörü |
Bir OBJ dosyası yükleme
from aspose.threed import Scene
from aspose.threed.formats import ObjLoadOptions
options = ObjLoadOptions()
options.enable_materials = True
options.flip_coordinate_system = False
options.scale = 1.0
scene = Scene()
scene.open("model.obj", options)
print(f"Top-level nodes: {len(scene.root_node.child_nodes)}")OBJ’ye Kaydediliyor
scene.save("output.obj")OBJ dışa aktarımı, köşe konumlarını ve çokgen yüzeylerini yazar. Eğer sahne içeriyorsa LambertMaterial veya PhongMaterial nesneler, kütüphane bir eşlik eden .mtl dosyayı otomatik olarak yazar.
STL Biçimi
STL (STereoLithography), üçgen ağları yüzeylerin indekslenmemiş bir listesi olarak depolar. Okuma için hem ikili hem de ASCII varyantları desteklenir; kütüphane kaydederken varsayılan olarak ikili formatı kullanır.
StlSaveOptions
StlSaveOptions zorunlu alanları yoktur. Bunu örnekleyerek şu yere geçirin scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)Gidiş-dönüş örneği
from aspose.threed import Scene
##Load
scene = Scene.from_file("model.stl")
##Inspect
for node in scene.root_node.child_nodes:
if node.entity:
print(f"{node.name}: {len(node.entity.control_points)} vertices")
##Save
scene.save("roundtrip.stl")STL yalnızca üçgen geometrisini depolar; yüzey normali dışındaki normal, UV koordinatları, materyaller ve hiyerarşi bulunmaz. Sahneniz dörtgenler veya daha yüksek dereceli çokgenler içeriyorsa, kaydedilirken otomatik olarak üçgene dönüştürülürler.
glTF / GLB Biçimi
glTF 2.0, modern 3D değişimi için önerilen formattır. Tam sahne grafiğini (düğüm hiyerarşisi, adlandırılmış düğümler, dönüşümler), materyalleri (LambertMaterial, PhongMaterial → PBR dönüşümü), ve animasyon kliplerini korur. GLB, tek dosyalı ikili konteyner varyantıdır.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binaryMalzeme desteği
Aspose.3D FOSS malzemeleri glTF’ye eşlenir pbrMetallicRoughness dışa aktarırken:
from aspose.threed import Scene
from aspose.threed.shading import PhongMaterial
from aspose.threed.utilities import Vector3
scene = Scene()
node = scene.root_node.create_child_node("object")
mat = PhongMaterial()
mat.diffuse_color = Vector3(0.8, 0.2, 0.2) # red
mat.specular_color = Vector3(1.0, 1.0, 1.0)
mat.shininess = 50.0
node.material = mat
scene.save("colored.gltf")glTF çıktısını doğrulama
import json
with open("output.gltf") as f:
data = json.load(f)
print(f"Asset version : {data['asset']['version']}")
print(f"Nodes : {len(data.get('nodes', []))}")
print(f"Meshes : {len(data.get('meshes', []))}")COLLADA Biçimi
COLLADA (.dae) XML tabanlı bir formattır ve sahne hiyerarşileri, materyaller, birden fazla UV kanalı ve iskelet animasyonunu destekler. Aspose.3D FOSS tam düğüm ağacını ve materyal tanımlarını okur ve yazar.
from aspose.threed import Scene
##Load a COLLADA file
scene = Scene.from_file("model.dae")
##Inspect top-level nodes
for node in scene.root_node.child_nodes:
print(f" {node.name}")
##Save back to COLLADA
scene.save("output.dae")COLLADA, adlandırılmış düğümler ve malzemelerle hiyerarşileri veri kaybı olmadan çift yönlü (round-trip) taşımanız gerektiğinde iyi bir seçimdir.
3MF Format
3MF (3D Manufacturing Format) targets additive manufacturing (3D printing) workflows. It stores triangle geometry, colour, and print-specific metadata in a ZIP-based container.
from aspose.threed import Scene
from aspose.threed.formats import ThreeMfSaveOptions
scene = Scene.from_file("part.stl") # Load from STL
opts = ThreeMfSaveOptions()
scene.save("part.3mf", opts) # Write as 3MF3MF is the recommended export format when targeting slicer software (Cura, PrusaSlicer, Bambu Studio, etc.).
FBX Formatı
Durum: devam ediyor (üretim için hazır değil).
FBX (.fbx) desteği Aspose.3D FOSS’ta şu anda tokenleştirici aşamasındadır. İkili FBX tokenleştiricisi dosya yapısını ayrıştırabilir, ancak tam düğüm, ağ ve materyal ayrıştırıcısında bilinen hatalar vardır ve tamamlanmamıştır. FBX okuma sonuçları deneysel olarak değerlendirilmelidir.
Bu sürümle üretim hatlarında FBX kullanmayın. Kaynak veriniz FBX formatındaysa, Aspose.3D FOSS ile yüklemeden önce Blender veya FBX Review kullanarak önce glTF veya OBJ’ye dönüştürün.
FBX yazımı desteklenmiyor.
Biçim Otomatik Algılama
Scene.from_file() ve scene.open() dosya uzantısını ve mümkünse dosya başlığındaki magic byte’ları kullanarak formatı otomatik olarak algılar:
from aspose.threed import Scene
##The library detects each format without being told explicitly
scene_obj = Scene.from_file("model.obj")
scene_glb = Scene.from_file("model.glb")
scene_stl = Scene.from_file("model.stl")
scene_dae = Scene.from_file("model.dae")
scene_3mf = Scene.from_file("model.3mf")Uzantı yoksa veya belirsizse, kütüphane başlık incelemesine (magic byte’lar) geri döner. Desteklenmeyen veya tanınmayan dosyalar bir IOError açıklayıcı mesajla birlikte hata oluşturur.
İpuçları ve En İyi Uygulamalar
- Modern pipeline’lar için glTF veya GLB kullanın. glTF, tam sahne grafiğini, materyalleri ve animasyon verilerini korur. Oyun motorları ve web görüntüleyicileriyle değişim için en eksiksiz formattır.
- Maksimum uyumluluk için OBJ kullanın. OBJ, neredeyse her 3D aracı tarafından desteklenir. Statik ağlara sınırlı olsa da son derece taşınabilirdir.
- Baskı için 3MF kullanın. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- FBX’i üretime hazır olana kadar kullanmaktan kaçının. Tam FBX ayrıştırmasının tamamlandığı sürüm için sürüm notlarını kontrol edin.
- Kaydetme uzantısını biçime eşleştirin. Bir … geçirmeyin
.gltfbinary GLB istediğinizde uzantıyı; kullan.glbaçıkça. Uzantı, hangi serileştiricinin kullanılacağını belirler. - Poligon uyumluluğunu kontrol edin. STL ve 3MF üçgen gerektirir. Dörtgenler ve N-gonlar kaydetme sırasında otomatik olarak üçgene dönüştürülür, ancak köşe sayısı artar. Üçgenleştirmeyi kontrol etmeniz gerekiyorsa, şu komutu çağırın
mesh.triangulate()kaydetmeden önce.