Cara Menukar Model 3D dalam TypeScript
Aspose.3D FOSS for TypeScript menukar antara format 3D dengan memuatkan ke dalam representasi neutral Scene dan menyimpan ke format sasaran. Panduan ini menunjukkan penukaran yang paling biasa.
Panduan Langkah demi Langkah
Langkah 1: Pasang @aspose/3d
npm install @aspose/3dLangkah 2: Muat Fail Sumber
Buat 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 Sasaran
Panggil scene.save() dengan laluan output. Format output dikesan daripada sambungan fail.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Nota: FBX tidak disokong oleh
scene.save()pengesanan automatik. Sambungan.fbxtidak disambungkan kepada mana-mana pengeksport — menyimpan ke.fbxsecara senyap menulis kandungan format OBJ sebagai gantinya. Gunakan OBJ, glTF, STL, 3MF, atau COLLADA untuk output yang boleh dipercayai.
Langkah 4: Contoh Penukaran 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 Disokong
Pengesanan automatik FBX tidak disambungkan dalam
scene.open(). Fail.fbxyang dihantar kepadascene.open()tidak dikenali oleh mana-mana pengesan format dan jatuh ke parser STL, yang akan gagal atau menghasilkan data sampah. Kelas import/eksport FBX wujud dalam perpustakaan tetapi memerlukan panggilan langsung dan bukannya API peringkat 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: Penukaran Pukal Berbilang Fail
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 Penukaran Disokong
| Dari \ Ke | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX tidak disokong melalui API peringkat tinggi open()/save() — format tidak disambungkan ke auto-pengesanan. Semua sel FBX di atas adalah ✗.
Isu Umum dan Penyelesaian
Bahan hilang selepas penukaran
Material OBJ (usemtl, fail .mtl) dimuatkan apabila ObjLoadOptions.enableMaterials = true. Apabila menyimpan ke glTF, sifat bahan PBR dipetakan secara automatik. Bahan kompleks (prosedural, berlapis‑berlapis) mungkin ditukar dengan ketepatan yang berkurang.
Mesh muncul berskala tidak betul
Format yang berbeza menggunakan unit lalai yang berbeza (milimeter untuk STL, meter untuk glTF). Gunakan ObjLoadOptions.scale semasa memuatkan atau StlSaveOptions.scaleFactor semasa menyimpan untuk menormalkan unit.
Ketidakcocokan sistem koordinat (model diputar atau dibalik)
Beberapa format menggunakan Y‑up di sebelah kanan, yang lain Z‑up. Gunakan ObjLoadOptions.flipCoordinateSystem = true atau terapkan putaran pada nod akar selepas dimuatkan.
Soalan Lazim
Adakah penukaran mengekalkan animasi?
Data animasi dipelihara semasa menukar antara format yang menyokongnya (contohnya, COLLADA → glTF). STL dan OBJ tidak membawa data animasi. FBX tidak disokong melalui scene.open()/scene.save(), jadi pusingan semula animasi FBX tidak tersedia melalui API peringkat tinggi.
Adakah data tekstur dipelihara?
Tekstur yang dirujuk oleh bahan OBJ atau terbenam dalam glTF dibawa ke dalam graf adegan. Apabila menyimpan ke GLB (binaryMode = true), buffer binari dimasukkan dalam satu fail tunggal. Untuk output OBJ, tekstur disimpan sebagai fail berasingan di sebelah .obj.
Bolehkah saya menukar banyak fail secara selari?
scene.open() dan scene.save() adalah serentak. Gunakan Node.js worker_threads untuk pemprosesan selari.