Node.js geliştiricileri 3D içerikle çalışırken sık sık formatlar arasında dönüştürme 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. Tek çalışma zamanı bağımlılığı şudur: xmldom.
Desteklenen Biçimler
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 | Hayır | Sadece içe aktar; okur .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* | Importer/exporter mevcut ancak format otomatik algılama bağlanmadı; üzerinden kullanılamaz scene.open() |
| COLLADA | .dae | Evet | Evet | XML tabanlı değişim formatı |
Not: OBJ yalnızca içe aktarım içindir (canExport: false). OBJ içeriğini başka bir formata dönüştürmek için, şununla yükleyin scene.open() ve glTF, STL veya 3MF gibi desteklenen bir ihracat formatına kaydedin.
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ükleme için verimlidir.
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. Kullan .glb ikili GLB için veya .gltf ayrı JSON + için .bin düzen.
OBJ’den STL’ye: 3B Baskı İçin Model Hazırlama
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ı depolar.
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 depolamaz. 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ı veya CAD Çıktısından 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 içermediği için, ortaya çıkan glTF dosyası yalnızca geometri içerecektir. Gerekirse, yüklemeden sonra sahne düğümlerine programlı olarak malzemeler 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 imalat 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 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 herhangi bir hatayı 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ı bir 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ı üzerinden yüklenemez scene.open().
Daha fazla ayrıntı için Scene, Node, ve Mesh bu örneklerde kullanılan sınıflar için, bu belgede sınıf referans sayfalarına bakın.