Cara Memperbaiki Kesalahan Model 3D di TypeScript
Panduan ini mencakup kesalahan paling umum saat menggunakan @aspose/3d untuk TypeScript dan Node.js, dengan perbaikan praktis untuk masing-masing.
Panduan Langkah-demi-Langkah
Langkah 1: Verifikasi Instalasi dan Versi
Pastikan Anda menggunakan versi Node.js yang didukung (18, 20, atau 22) dan paket sudah terinstal:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionJika paket tidak ditemukan, instal ulang:
npm install @aspose/3dLangkah 2: Perbaiki Kesalahan Resolusi Modul
Kesalahan: Cannot find module '@aspose/3d/formats/obj'
Impor sub‑path memerlukan ekspor paket Node.js 12.7+. Di TypeScript, atur resolusi modul yang tepat:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}Untuk proyek ESM, gunakan "module": "ES2022" dan "moduleResolution": "bundler".
Langkah 3: Debug Adegan Kosong Setelah Memuat
Jika scene.rootNode.childNodes kosong setelah scene.open():
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
console.log(`Child nodes: ${scene.rootNode.childNodes.length}`);Penyebab umum:
- Opsi format salah: untuk OBJ, selalu berikan
new ObjLoadOptions(). Menggunakan opsi generik dapat mencegah deteksi format. - Jalur file salah: perpustakaan secara diam-diam memuat adegan kosong jika file tidak ditemukan:
import * as fs from 'fs';
const filePath = 'model.obj';
if (!fs.existsSync(filePath)) {
throw new Error(`File not found: ${filePath}`);
}
const scene = new Scene();
scene.open(filePath, new ObjLoadOptions());- File OBJ menggunakan akhir baris non-standar: buka di editor teks dan pastikan file valid.
Langkah 4: Perbaiki Masalah Sistem Koordinat
Model dapat terlihat diputar, dicerminkan, atau berskala tidak tepat karena perbedaan sistem koordinat antar format.
Tangan kanan vs tangan kiri, Y-up vs Z-up:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const options = new ObjLoadOptions();
options.flipCoordinateSystem = true; // Swap Y and Z axes
const scene = new Scene();
scene.open('model.obj', options);Masalah skala (misalnya, STL dalam milimeter vs glTF dalam meter):
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const options = new ObjLoadOptions();
options.scale = 0.001; // Convert millimeters to meters
const scene = new Scene();
scene.open('model.obj', options);Langkah 5: Tangani Masalah Memori dengan File Besar
Untuk file yang lebih besar dari 100 MB, tingkatkan ukuran heap Node.js:
node --max-old-space-size=4096 convert.jsAtau atur di package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Proses file besar satu per satu daripada secara paralel untuk menghindari masalah memori puncak.
Referensi Kesalahan Umum
| Kesalahan | Penyebab Kemungkinan | Perbaikan |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Konfigurasi resolusi modul | Setel moduleResolution: node16 di tsconfig |
scene.rootNode.childNodes kosong | Opsi salah atau file tidak ditemukan | Periksa jalur file; berikan yang benar *LoadOptions |
| Geometri tampak terbalik/cermin | Ketidaksesuaian sistem koordinat | Setel flipCoordinateSystem = true |
| Geometri tampak berskala tidak tepat | Perbedaan satuan antar format | Setel scale di opsi muat |
ENOMEM atau proses dihentikan | Memori tidak cukup untuk file besar | Tingkatkan --max-old-space-size |
Kesalahan tipe TypeScript pada node.entity | Tipe entitas luas | Gunakan instanceof Mesh guard |
Pertanyaan yang Sering Diajukan
Bagaimana cara melaporkan bug parsing?
Buka issue di repositori GitHub dengan nama format, file minimal yang dapat direproduksi, dan pesan kesalahan yang tepat.
Mengapa beberapa mesh memiliki nol titik kontrol?
Beberapa grup OBJ hanya mendefinisikan koordinat tekstur atau normal tanpa data posisi. Periksa mesh.controlPoints.length > 0 sebelum diproses.
Pustaka secara diam-diam mengabaikan kesalahan parsing. Bagaimana cara mendeteksinya?
Bungkus scene.open() dalam blok try/catch. Jika file rusak, perpustakaan mungkin melemparkan pengecualian atau memuat adegan parsial:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}