3D içerikle çalışan Node.js geliştiricileri sık sık formatlar arasında dönüşüm yapma ihtiyacı duyar: bir tasarım aracı OBJ dışa aktarır, bir web renderleyicisi GLB bekler, bir 3D yazıcı STL ister ve bir üretim hattı 3MF kullanır. Bu dönüşümleri tek, tutarlı bir API ile yönetmek, bir pipeline’daki harici araç sayısını azaltır ve dönüşüm mantığını uygulama kodu içinde tutar; böylece test edilebilir ve sürümlendirilebilir.
Bu @aspose/3d paket (v24.12.0, MIT lisansı) Node.js’te tüm büyük 3D formatlarını okuma ve yazma için TypeScript-öncelikli bir API sağlar. Bu kılavuz, en yaygın dönüşüm iş akışlarını adım adım gösterir.
Kurulum
npm install @aspose/3d
Gereksinimler: Node.js 18, 20 veya 22; TypeScript 5.0 veya daha yeni sürüm. Tek çalışma zamanı bağımlılığı şudur: xmldom.
Desteklenen Formatlar
Aşağıdaki tablo, bu kılavuzda ele alınan formatları ve okuma/yazma desteklerini listeler.
| Biçim | Uzantı | Oku | Yaz | Notlar |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Evet | Evet | Okur/yazar .mtl malzeme dosyaları |
| glTF 2.0 (JSON) | .gltf | Evet | Evet | Standart web teslim formatı |
| glTF 2.0 (Binary) | .glb | Evet | Evet | Kendine yeterli, web için tercih edilen |
| STL (ASCII/Binary) | .stl | Evet | Evet | Standart 3D baskı formatı |
| 3MF | .3mf | Evet | Evet | Zengin meta veriye sahip üretim formatı |
| FBX | .fbx | Hayır* | Hayır* | İçe aktarma/ihracat mevcut ancak format otomatik algılama bağlanmadı; üzerinden kullanılamaz scene.open() |
| COLLADA | .dae | Evet | Evet | XML tabanlı değişim formatı |
OBJ hem içe aktarmayı hem de dışa aktarmayı destekler. Şununla yükleyin scene.open() ve şununla kaydedin scene.save('output.obj'), ya da glTF, STL veya 3MF gibi desteklenen başka bir formata dönüştürün.
OBJ’den GLB’ye (Web Dağıtımı)
OBJ’yi ikili glTF (GLB)‘ye dönüştürmek en yaygın web iş akışıdır. GLB, tek bir dosyada doku, geometri ve meta verileri barındıran bağımsız bir ikili pakettir; bu da HTTP üzerinden dağıtımı ve Three.js, Babylon.js ve model-viewer tarafından doğrudan yüklemeyi verimli kılar.
import { Scene } from '@aspose/3d';
function convertObjToGlb(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.glb' selects binary GLB format
console.log(`Converted ${inputPath} -> ${outputPath}`);
}
convertObjToGlb('model.obj', 'model.glb');
Çıktı formatı dosya uzantısından çıkarılır. Şunu kullanın .glb ikili GLB için ya da .gltf ayrı JSON + için .bin düzen.
OBJ’den STL’ye (3D Baskı Hazırlığı)
STL, FDM ve SLA 3D baskının ortak dili (lingua franca)‘dır. PrusaSlicer, Bambu Studio ve Chitubox gibi dilimleyiciler STL’yi kabul eder. OBJ’den STL’ye dönüştürme basittir çünkü her iki format da üçgen ağları saklar.
import { Scene } from '@aspose/3d';
function convertObjToStl(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.stl' selects STL format
console.log(`STL written to ${outputPath}`);
}
convertObjToStl('part.obj', 'part.stl');
STL renk, malzeme veya UV verilerini saklamaz. OBJ dosyanız malzeme grupları kullanıyorsa, bu bilgiler dışa aktarım sırasında atılır. Renk koruyan baskı formatları için bunun yerine 3MF’yi düşünün (aşağıya bakın).
STL’den glTF’ye (Tarayıcı ve CAD’den Web’e)
Yapılandırılmış ışık tarayıcıları ve parametrik CAD dışa aktarıcıları genellikle STL üretir. glTF’ye dönüştürmek, geometriyi sunucu tarafı render adımı olmadan web tabanlı görüntüleyiciler ve AR platformlarında erişilebilir kılar.
import { Scene } from '@aspose/3d';
function convertStlToGltf(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
// extension '.gltf' saves as JSON + .bin sidecar
scene.save(outputPath);
console.log(`glTF written to ${outputPath}`);
}
convertStlToGltf('scan_output.stl', 'scan_output.gltf');
STL malzeme veya doku bilgisi taşımadığından, ortaya çıkan glTF dosyası yalnızca geometri içerir. Gerekirse, yüklemeden sonra sahne düğümlerine programlı olarak malzeme ekleyebilirsiniz.
3MF to glTF (Manufacturing to Visualization)
3D Üretim Formatı (3MF), renk, malzemeler, bileşen ağaçları ve baskı meta verilerini geometriyle birlikte depoladığı için eklemeli üretim iş akışlarında giderek daha fazla kullanılmaktadır. 3MF’yi glTF’ye dönüştürmek, sahne yapısını korurken web araçlarında sonraki görselleştirmeyi mümkün kılar.
import { Scene } from '@aspose/3d';
function convert3mfToGlb(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.glb' selects binary GLB format
console.log(`3MF -> GLB: ${outputPath}`);
}
convert3mfToGlb('assembly.3mf', 'assembly.glb');
3MF files often contain multi-component assemblies. The scene graph produced by scene.open() bileşen hiyerarşisini içinde korur scene.rootNode.childNodes, böylece kaydetmeden önce bireysel parçaları inceleyebilir veya manipüle edebilirsiniz.
Toplu Dönüştürme Deseni
Dosyalar dizinini işlerken, her dönüşümü bir try/catch böylece tek bir bozuk dosya tüm toplu işlemi iptal etmez.
import { Scene } from '@aspose/3d';
import { readdirSync } from 'fs';
import { join, basename, extname } from 'path';
interface ConversionResult {
input: string;
output: string;
success: boolean;
error?: string;
}
function batchConvertToGlb(
inputDir: string,
outputDir: string,
extensions: string[] = ['.obj', '.stl', '.3mf', '.dae'] // .fbx excluded: format auto-detection not wired
): ConversionResult[] {
const results: ConversionResult[] = [];
const files = readdirSync(inputDir).filter((f) =>
extensions.includes(extname(f).toLowerCase())
);
for (const file of files) {
const inputPath = join(inputDir, file);
const outputPath = join(outputDir, basename(file, extname(file)) + '.glb');
try {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.glb' infers GLB format
results.push({ input: inputPath, output: outputPath, success: true });
} catch (err) {
const message = err instanceof Error ? err.message : String(err);
results.push({ input: inputPath, output: outputPath, success: false, error: message });
console.error(`Failed to convert ${file}: ${message}`);
}
}
const succeeded = results.filter((r) => r.success).length;
console.log(`Batch complete: ${succeeded}/${results.length} files converted.`);
return results;
}
// Usage
batchConvertToGlb('./input', './output');
Yukarıdaki desen, bir giriş dizininden desteklenen her dosya uzantısını okur, GLB’ye dönüştürür ve döngüyü durdurmadan hataları kaydeder. Döndürülen dizi ConversionResult nesneler raporlama veya yeniden deneme mantığı için kullanılabilir.
Sonuç
@aspose/3d Node.js TypeScript uygulamasında format dönüşüm ihtiyaçlarının tam kapsamını tutarlı iki adımlı API ile kapsar: scene.open() yüklemek için, scene.save() yazmak için. Hatırlanması gereken temel kısıtlama, FBX içe aktarıcı ve dışa aktarıcı sınıflarının mevcut olması ancak format otomatik algılamasının henüz bağlanmamış olmasıdır, bu yüzden FBX dosyaları via scene.open().
Daha fazla ayrıntı için Scene, Node, ve Mesh sınıflar, bu örneklerde kullanılan, bu belgede sınıf referans sayfalarına bakın.