Cara Menukar Model 3D dalam TypeScript

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/3d

Langkah 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 .fbx tidak disambungkan kepada mana-mana pengeksport — menyimpan ke .fbx secara 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 .fbx yang dihantar kepada scene.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 tinggi open()/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 \ KeglTF/GLBOBJSTLFBX3MFCOLLADA
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.


Lihat Juga

 Bahasa Melayu