Cara Mengonversi Model 3D dalam TypeScript

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

Langkah 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 .fbx tidak terhubung ke ekspor apa pun — menyimpan ke .fbx secara 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 .fbx yang diteruskan ke scene.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 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: 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 \ KeglTF/GLBOBJSTLFBX3MFCOLLADA
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.


Lihat Juga

 Bahasa Indonesia