TypeScript'te 3D Modelleri Nasıl Dönüştürülür
Aspose.3D FOSS for TypeScript, 3D formatları arasında, nötr Scene temsiline yükleyerek ve hedef formata kaydederek dönüştürür. Bu kılavuz en yaygın dönüşümleri gösterir.
Adım Adım Kılavuz
Adım 1: @aspose/3d’yi kurun
npm install @aspose/3dAdım 2: Kaynak Dosyayı Yükle
Bir Scene oluşturun ve scene.open() çağırın. En iyi sonuçlar için format‑özel *LoadOptions sınıfını kullanın.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
scene.open('model.obj', opts);Adım 3: Hedef Formata Kaydet
scene.save()‘i çıktı yolu ile çağırın. Çıktı formatı dosya uzantısından algılanır.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Not: FBX desteklenmiyor
scene.save()otomatik algılaması tarafından..fbxuzantısı herhangi bir dışa aktarıcıya bağlanmamış —.fbx‘ye kaydetmek sessizce OBJ-format içeriği yazar. Güvenilir çıktı için OBJ, glTF, STL, 3MF veya COLLADA kullanın.
Adım 4: Yaygın Dönüştürme Örnekleri
OBJ’den glTF / GLB’ye
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
scene.save('model.glb');
console.log('Converted OBJ → GLB');FBX — Desteklenmiyor
FBX otomatik algılaması
scene.open()içinde bağlanmamıştır.scene.open()‘e geçirilen bir.fbxdosyası hiçbir format algılayıcı tarafından tanınmaz ve STL ayrıştırıcısına düşer; bu da başarısız olur ya da çöp üretir. Kütüphanede FBX içe/dışa aktarma sınıfları bulunur ancak yüksek seviyeliopen()/save()API’si yerine doğrudan çağrı gerektirir. FBX alternatifi olarak COLLADA, OBJ veya glTF kullanın.
glTF’den STL’ye
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA’dan 3MF’ye
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Adım 5: Birden Çok Dosyayı Toplu Olarak Dönüştür
import * as fs from 'fs';
import * as path from 'path';
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const inputDir = './input';
const outputDir = './output';
fs.mkdirSync(outputDir, { recursive: true });
const objFiles = fs.readdirSync(inputDir).filter(f => f.endsWith('.obj'));
for (const file of objFiles) {
const inputPath = path.join(inputDir, file);
const outputFile = file.replace('.obj', '.glb');
const outputPath = path.join(outputDir, outputFile);
const scene = new Scene();
scene.open(inputPath, new ObjLoadOptions());
scene.save(outputPath);
console.log(`Converted ${file} → ${outputFile}`);
}Desteklenen Dönüşüm Matrisi
| Kaynak \ Hedef | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX yüksek seviyeli open()/save() API’si aracılığıyla desteklenmiyor — format otomatik algılamaya bağlanmamış. Yukarıdaki tüm FBX hücreleri ✗.
Yaygın Sorunlar ve Çözümler
Malzemeler dönüşümden sonra kaybolur
OBJ malzemeleri (usemtl, .mtl dosyası) ObjLoadOptions.enableMaterials = true sırasında yüklenir. glTF’ye kaydedilirken, PBR malzeme özellikleri otomatik olarak eşlenir. Karmaşık malzemeler (prosedürel, çok katmanlı) azaltılmış doğrulukla dönüştürülebilir.
Mesh yanlış ölçeklendirilmiş görünüyor
Farklı formatlar farklı varsayılan birimler kullanır (STL için milimetre, glTF için metre). Birimleri normalleştirmek için yüklerken ObjLoadOptions.scale, kaydederken ise StlSaveOptions.scaleFactor kullanın.
Koordinat sistemi uyumsuzluğu (model ters çevrilmiş veya döndürülmüş)
Bazı formatlar sağ el Y‑yukarı yönünü kullanırken, diğerleri Z‑yukarı yönünü kullanır. ObjLoadOptions.flipCoordinateSystem = true kullanın veya yükleme sonrasında kök düğüme bir dönüşüm uygulayın.
Sıkça Sorulan Sorular
Dönüştürme animasyonları korur mu?
Animasyon verileri, bunu destekleyen formatlar arasında dönüştürülürken korunur (ör., COLLADA → glTF). STL ve OBJ animasyon verisi taşımaz. FBX, scene.open()/scene.save() aracılığıyla desteklenmediği için, FBX animasyon dönüşleri yüksek seviyeli API üzerinden mevcut değildir.
Doku verileri korunur mu?
OBJ malzemeleri tarafından referans verilen veya glTF içinde gömülü dokular sahne grafiğine taşınır. GLB’ye (binaryMode = true) kaydederken, ikili tampon tek bir dosyada gömülür. OBJ çıktısı için, dokular .obj ile birlikte ayrı dosyalar olarak kaydedilir.
Birçok dosyayı paralel olarak dönüştürebilir miyim?
scene.open() ve scene.save() eşzamanlıdır. Paralel işleme için Node.js worker_threads kullanın.