Cara Membetulkan Ralat Model 3D dalam TypeScript
Panduan ini merangkumi ralat paling umum apabila menggunakan @aspose/3d untuk TypeScript dan Node.js, dengan pembaikan praktikal untuk setiap satu.
Panduan Langkah demi Langkah
Langkah 1: Sahkan Pemasangan dan Versi
Pastikan anda menggunakan versi Node.js yang disokong (18, 20, atau 22) dan pakej telah dipasang:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionJika pakej tidak ditemui, pasang semula:
npm install @aspose/3dLangkah 2: Betulkan Ralat Penyelesaian Modul
Ralat: Cannot find module '@aspose/3d/formats/obj'
Import sub-laluan memerlukan eksport pakej Node.js 12.7+. Dalam TypeScript, tetapkan penyelesaian modul yang betul:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}Untuk projek ESM, gunakan "module": "ES2022" dan "moduleResolution": "bundler".
Langkah 3: Debug Adegan Kosong Selepas Memuat
Jika scene.rootNode.childNodes kosong selepas 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}`);Punca umum:
- Pilihan format yang salah: untuk OBJ, sentiasa berikan
new ObjLoadOptions(). Menggunakan pilihan generik boleh menghalang pengesanan format. - Laluan fail salah: pustaka secara senyap memuatkan adegan kosong jika fail tidak ditemui:
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());- Fail OBJ menggunakan penghujung baris bukan piawai: buka dalam penyunting teks dan pastikan fail tersebut sah.
Langkah 4: Baiki Isu Sistem Koordinat
Model mungkin kelihatan diputar, dipantulkan, atau berskala tidak betul disebabkan perbezaan sistem koordinat antara format.
Tangan kanan vs tangan kiri, Y-atas vs Z-atas:
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);Isu skala (contoh, 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 Isu Memori dengan Fail Besar
Untuk fail yang lebih besar daripada 100 MB, tingkatkan saiz heap Node.js:
node --max-old-space-size=4096 convert.jsAtau tetapkan dalam package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Proses fail besar satu demi satu dan bukannya secara selari untuk mengelakkan isu memori puncak.
Rujukan Ralat Umum
| Ralat | Punca Kemungkinan | Pembetulan |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Konfigurasi resolusi modul | Tetapkan moduleResolution: node16 dalam tsconfig |
scene.rootNode.childNodes kosong | Pilihan salah atau fail tidak dijumpai | Semak laluan fail; berikan yang betul *LoadOptions |
| Geometri kelihatan terbalik/cermin | Sistem koordinat tidak sepadan | Tetapkan flipCoordinateSystem = true |
| Geometri kelihatan berskala tidak betul | Perbezaan unit antara format | Tetapkan scale dalam pilihan muat |
ENOMEM atau proses dibunuh | Memori tidak mencukupi untuk fail besar | Tingkatkan --max-old-space-size |
Ralat jenis TypeScript pada node.entity | Jenis entiti luas | Gunakan instanceof Mesh penjaga |
Soalan Lazim
Bagaimana saya melaporkan pepijat penguraian?
Buka isu pada repositori GitHub dengan nama format, fail reproduktif minimum, dan mesej ralat yang tepat.
Mengapa sesetengah mesh mempunyai titik kawalan sifar?
Beberapa kumpulan OBJ hanya mendefinisikan koordinat tekstur atau normal tanpa data kedudukan. Periksa mesh.controlPoints.length > 0 sebelum diproses.
Pustaka secara senyap mengabaikan ralat penguraian. Bagaimana saya dapat mengesannya?
Balut scene.open() dalam blok try/catch. Jika fail rosak, perpustakaan mungkin melemparkan pengecualian atau memuatkan adegan separa:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}