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 terpasang:
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 benar:
// 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 yang 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 tersebut valid.
Langkah 4: Perbaiki Masalah Sistem Koordinat
Model dapat muncul terputar, terbalik, atau berskala tidak tepat karena perbedaan sistem koordinat antara 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 (mis., 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 *LoadOptions yang benar |
| Geometri muncul terbalik/cermin | Ketidaksesuaian sistem koordinat | Setel flipCoordinateSystem = true |
| Geometri muncul dengan skala yang salah | Perbedaan satuan antar format | Setel scale dalam opsi pemuatan |
ENOMEM atau proses dihentikan | Memori tidak cukup untuk file besar | Tingkatkan --max-old-space-size |
Kesalahan tipe TypeScript pada node.entity | Tipe entitas yang terlalu umum | Gunakan penjaga instanceof Mesh |
Pertanyaan yang Sering Diajukan
Bagaimana cara saya melaporkan bug parsing?
Buka sebuah isu di repositori GitHub dengan nama format, file yang dapat direproduksi secara minimal, 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 memproses.
Library secara diam-diam mengabaikan kesalahan parsing. Bagaimana cara saya mendeteksinya?
Balut scene.open() dalam blok try/catch. Jika file rusak, perpustakaan dapat melempar pengecualian atau memuat adegan parsial:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}