Giriş

3D içeriği nadiren tüm ömrü boyunca tek bir formatta kalır. Bir model, modelleme uygulamasından dışa aktarılan bir OBJ dosyası olarak ortaya çıkabilir, 3D baskı pipeline’ı içinde STL olarak ilerleyebilir, bir web uygulamasında glTF olarak görünebilir ve eklemeli imalat aracında 3MF olarak sonlanabilir. Her format farklı bir kitleye ve farklı bir downstream araca hizmet eder ve bunlar arasındaki dönüşüm, çoğu 3D pipeline’ın güvenilir bir şekilde ele alması gereken bir şeydir.

Python bu iş için doğal bir uyum sağlar: kabuk betikleri çok kırılgandır ve tam DCC (digital content creation) araç entegrasyonları toplu işlem için çok ağırdır. İhtiyacınız olan, bu formatların herhangi birini yükleyebilen, tutarlı bir sahne grafiği sağlayan ve bir GUI ya da grafik sürücüsü gerektirmeden herhangi bir hedef formata geri yazabilen bir kütüphanedir.

Aspose.3D FOSS for Python (aspose-3d-foss, MIT license) bu boşluğu kapatır. Bu kılavuz, eksiksiz, çalıştırılabilir kod örnekleriyle en yaygın dönüşüm yollarını gösterir.


Aspose.3D FOSS Hangi Formatları Destekliyor?

FormatUzantı(lar)YükleKaydetYaygın Kullanım Durumu
Wavefront OBJ.objEvetEvetModelleme araçlarından değişim; .mtl malzeme dosyaları desteklenir
STL.stlEvetEvet3D baskı, CAD dışa aktarımı; ikili ve ASCII varyantları
glTF 2.0 / GLB.gltf, .glbEvetEvetWeb görüntüleyicileri, oyun motorları; GLB, kendi içinde bütünleşik ikili varyanttır
COLLADA.daeEvetEvetAnimasyon araçlarından içe aktarım; ColladaSaveOptions dışa aktarmayı destekler
3MF.3mfEvetEvetKatmanlı imalat, STL’den daha zengin baskı meta verileri

Biçim algılaması dosya uzantısından otomatik olarak yapılır. Biçim‑özel seçenek sınıfları (ObjLoadOptions, StlSaveOptions, GltfSaveOptions), ayrıntılı kontrol gerektiğinde kullanılabilir.

FBX Notu: Kütüphane, içe aktarma için kısmi bir FBX ayrıştırıcısı içerir. FBX, bu sürümde üretim dönüşüm iş akışları için önerilmez; bunun yerine ara format olarak OBJ veya glTF kullanın.


OBJ’den STL’ye: 3D Baskı için Model Hazırlama

OBJ, modelleme ve heykelleştirme araçlarından en yaygın çıkış formatıdır. STL, 3D baskı dilimleyicilerinin ortak dilidir. Aralarındaki dönüşüm tek bir çağrı ile yapılır.

from aspose.threed import Scene
from aspose.threed.formats import StlSaveOptions

scene = Scene.from_file("model.obj")

opts = StlSaveOptions()
scene.save("model.stl", opts)

STL yalnızca üçgen yüzeyleri kodlar. OBJ dosyanızda dörtgen veya n‑gon yüzeyler varsa, dışa aktarıcı bunları yazmadan önce otomatik olarak üçgenleştirir. Kaydetmeden önce üçgenleştirmeyi açıkça kontrol etmek istiyorsanız, sahnedeki her bir ağ üzerinde mesh.triangulate() çağırın:

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.formats import StlSaveOptions

scene = Scene.from_file("model.obj")

def triangulate_all(node):
    if isinstance(node.entity, Mesh):
        # entity setter clears existing entities and sets the new one
        node.entity = node.entity.triangulate()
    for child in node.child_nodes:
        triangulate_all(child)

triangulate_all(scene.root_node)
scene.save("model_triangulated.stl", StlSaveOptions())

OBJ’dan glTF’ye: Web ve Oyun Motorları için Dışa Aktarma

glTF 2.0 gerçek zamanlı renderlayıcılar, WebGL görüntüleyicileri ve Babylon.js, Three.js ve Unity gibi oyun motorları için tercih edilen değişim formatıdır. GLB (ikili varyant) geometriyi, dokuları ve malzemeleri tek bir kendi kendine yeten dosyada paketler, bu da HTTP üzerinden sunmayı kolaylaştırır.

from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions

scene = Scene.from_file("model.obj")

##Save as JSON-based glTF (external buffer)
opts_gltf = GltfSaveOptions()
scene.save("model.gltf", opts_gltf)

##Save as self-contained GLB binary: preferred for web delivery
scene.save("model.glb", GltfSaveOptions())

Biçim dosya uzantısından çıkarılır: .gltf JSON+binary-buffer çiftini üretir; .glb tek dosyalı ikiliyi üretir. OBJ malzeme verileri (LambertMaterial, PhongMaterial) eşdeğeri mevcut olduğunda glTF PBR malzeme temsiline taşınır.


STL’den glTF’ye: Tarayıcı veya CAD Çıktısından Web’e

3D tarayıcılar ve CAD sistemlerinden gelen STL dosyaları, web’de görüntülenebilir hâle getirilmesi gereken yaygın girdilerdir. STL yalnızca üçgen geometrisi taşır ve malzeme verisi içermez, bu yüzden dönüşüm basittir.

from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions

scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())

STL, alışılmadık bir koordinat sistemi (Z-yukarı vs Y-yukarı) kullanan bir CAD aracıyla üretildiyse, kaydetmeden önce kök düğüm dönüşümünü inceleyebilir ve düzeltebilirsiniz:

import math
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions

scene = Scene.from_file("cad_export.stl")

# Rotate -90 degrees around X to convert Z-up to Y-up
# set_euler_angles takes radians, not degrees
root = scene.root_node
root.transform.set_euler_angles(-math.pi / 2, 0.0, 0.0)

scene.save("cad_export_yup.glb", GltfSaveOptions())

glTF’den 3MF’ye: Katmanlı Üretim İçin Hazırlık

3MF, 3MF Konsorsiyumu tarafından desteklenen modern bir 3D baskı formatıdır. STL’ye (renk, malzeme atamaları, yapı talimatları) göre daha zengin meta verileri destekler ve PrusaSlicer ve Bambu Studio gibi dilimleme yazılımları tarafından kabul edilir. Web görüntüleyicisinden modelleri bir baskı iş akışına teslim ediyorsanız, GLB’yi 3MF’ye dönüştürmek faydalı bir adımdır.

from aspose.threed import Scene
from aspose.threed import FileFormat
from aspose.threed.formats import SaveOptions

scene = Scene.from_file("model.glb")
scene.save("model.3mf")

3MF formatı .3mf uzantısından otomatik olarak algılanır. Açık kontrol için, 3MF için yapılandırılmış bir SaveOptions örneği geçirin.


Toplu Dönüştürme Deseni

Pratikte, dönüşüm görevleri tek tek dosyalar yerine dosya dizinleri üzerinde çalışır. Aşağıdaki desen, bir OBJ dosyaları klasörünü işler ve her birini GLB’ye dönüştürür; dosya başına hata işleme sayesinde tek bir hatalı dosya tüm çalışmayı durdurmaz.

import os
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions

input_dir = "./obj_files"
output_dir = "./glb_files"

os.makedirs(output_dir, exist_ok=True)

opts = GltfSaveOptions()
results = {"ok": [], "failed": []}

for filename in os.listdir(input_dir):
    if not filename.lower().endswith(".obj"):
        continue
    src = os.path.join(input_dir, filename)
    stem = os.path.splitext(filename)[0]
    dst = os.path.join(output_dir, stem + ".glb")
    try:
        scene = Scene.from_file(src)
        scene.save(dst, opts)
        results["ok"].append(filename)
        print(f"OK  {filename} -> {stem}.glb")
    except Exception as exc:
        results["failed"].append((filename, str(exc)))
        print(f"ERR {filename}: {exc}")

print(f"\n{len(results['ok'])} converted, {len(results['failed'])} failed.")
if results["failed"]:
    for name, reason in results["failed"]:
        print(f"  {name}: {reason}")

Bu desen, diğer kaynak/hedef format çiftlerine doğal olarak genişler: yukarıdaki destek tablosundaki herhangi bir kombinasyon için uzantı filtresini ve SaveOptions sınıfını değiştirin.


Sonuç

Aspose.3D FOSS for Python format dönüşümünü basitleştirir: Scene.from_file ile yükleyin, isteğe bağlı olarak sahne grafiğini inceleyin veya değiştirin, ardından uygun SaveOptions ile kaydedin. Kütüphane içsel olarak üçgenleştirme, koordinat normalizasyonu ve format‑spesifik tuhaflıkları yönetir.

Sınıflar ve yöntemlerin tam listesi için, API Reference sayfasına bakın. Sahne grafiği modeli (nodes, meshes, transforms) hakkında daha derine inmek için, bakın: