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

FormatUzantıOkumaYazmaSeçenekler sınıfıNotlar
Wavefront OBJ.objEvetEvetObjLoadOptions.mtl malzeme yükleme destekleniyor
STL (binary).stlEvetEvetStlSaveOptionsBinary ve ASCII okuma; kaydetme varsayılanı binary
STL (ASCII).stlEvetEvetStlSaveOptionsGidiş-dönüş doğrulandı
glTF 2.0.gltfEvetEvetGltfSaveOptionsTam sahne grafiği, materyaller ve animasyonlar korundu
GLB (binary glTF).glbEvetEvetGltfSaveOptionsTek dosyalı ikili konteyner
COLLADA.daeEvetEvetColladaLoadOptions / ColladaSaveOptionsSahne hiyerarşisi ve materyaller
3MF.3mfEvetEvetThreeMfSaveOptionsKatmanlı imalat formatı
FBX.fbxKısmiHayırN/ATokenleş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

ÖzellikTürVarsayılanAçıklama
enable_materialsboolTrueAyrıştır .mtl OBJ başlığı tarafından referans verilen dosya
flip_coordinate_systemboolFalseY-yukarı sağ el sisteminden Z-yukarı sağ el sistemine dönüştür
normalize_normalboolTrueİçe aktarılan tüm yüzey normallerini birim uzunluğa normalleştir
scalefloat1.0Tü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 binary

Malzeme 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 3MF

3MF 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 .gltf binary GLB istediğinizde uzantıyı; kullan .glb açı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.
 Türkçe