Cara Mengonversi Model 3D dalam TypeScript
Aspose.3D FOSS for TypeScript mengonversi antar format 3D dengan memuat ke dalam representasi netral Scene dan menyimpan ke format target. Panduan ini menunjukkan konversi yang paling umum.
Panduan Langkah-demi-Langkah
Langkah 1: Instal @aspose/3d
npm install @aspose/3dLangkah 2: Muat File Sumber
Buat sebuah Scene dan panggil scene.open(). Gunakan kelas *LoadOptions khusus format untuk hasil terbaik.
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);Langkah 3: Simpan ke Format Target
Panggil scene.save() dengan jalur output. Format output dideteksi dari ekstensi file.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Catatan: FBX tidak didukung oleh
scene.save()auto-detection. Ekstensi.fbxtidak terhubung ke ekspor apa pun — menyimpan ke.fbxsecara diam-diam menulis konten berformat OBJ. Gunakan OBJ, glTF, STL, 3MF, atau COLLADA untuk output yang dapat diandalkan.
Langkah 4: Contoh Konversi Umum
OBJ ke glTF / GLB
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 — Tidak Didukung
Deteksi otomatis FBX tidak terhubung di
scene.open(). File.fbxyang diteruskan kescene.open()tidak dikenali oleh detektor format apa pun dan jatuh ke parser STL, yang akan gagal atau menghasilkan sampah. Kelas impor/ekspor FBX ada di perpustakaan tetapi memerlukan pemanggilan langsung daripada API tingkat tinggiopen()/save(). Gunakan COLLADA, OBJ, atau glTF sebagai alternatif FBX.
glTF ke STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA ke 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Langkah 5: Konversi Banyak File Secara Batch
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}`);
}Matriks Konversi yang Didukung
| Dari \ Ke | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX tidak didukung melalui API tingkat tinggi open()/save() — format tidak terhubung ke deteksi otomatis. Semua sel FBX di atas adalah ✗.
Masalah Umum dan Solusi
Materi hilang setelah konversi
Material OBJ (usemtl, .mtl file) dimuat ketika ObjLoadOptions.enableMaterials = true. Saat menyimpan ke glTF, properti material PBR dipetakan secara otomatis. Material kompleks (prosedural, multi‑lapisan) mungkin dikonversi dengan fidelitas yang berkurang.
Mesh muncul dengan skala yang tidak tepat
Berbagai format menggunakan satuan default yang berbeda (milimeter untuk STL, meter untuk glTF). Gunakan ObjLoadOptions.scale saat memuat atau StlSaveOptions.scaleFactor saat menyimpan untuk menormalkan satuan.
Ketidaksesuaian sistem koordinat (model terbalik atau diputar)
Beberapa format menggunakan Y‑up di tangan kanan, yang lain Z‑up. Gunakan ObjLoadOptions.flipCoordinateSystem = true atau terapkan rotasi pada node akar setelah memuat.
Pertanyaan yang Sering Diajukan
Apakah konversi mempertahankan animasi?
Data animasi dipertahankan saat mengonversi antara format yang mendukungnya (mis., COLLADA → glTF). STL dan OBJ tidak membawa data animasi. FBX tidak didukung melalui scene.open()/scene.save(), sehingga putaran balik animasi FBX tidak tersedia melalui API tingkat tinggi.
Apakah data tekstur dipertahankan?
Tekstur yang direferensikan oleh material OBJ atau disematkan dalam glTF dibawa ke dalam grafik adegan. Saat menyimpan ke GLB (binaryMode = true), buffer biner disematkan dalam satu file. Untuk output OBJ, tekstur disimpan sebagai file terpisah di samping .obj.
Apakah saya dapat mengonversi banyak file secara paralel?
scene.open() dan scene.save() bersifat sinkron. Gunakan Node.js worker_threads untuk pemrosesan paralel.