Cum să remediați erorile modelelor 3D în TypeScript
Acest ghid acoperă cele mai comune erori atunci când se folosește @aspose/3d pentru TypeScript și Node.js, cu soluții practice pentru fiecare.
Ghid pas cu pas
Pasul 1: Verificați instalarea și versiunile
Asigurați-vă că utilizați o versiune suportată de Node.js (18, 20 sau 22) și că pachetul este instalat:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionDacă pachetul nu este găsit, reinstalați:
npm install @aspose/3dPasul 2: Remediați erorile de rezolvare a modulelor
Eroare: Cannot find module '@aspose/3d/formats/obj'
Importurile sub-cale necesită exporturi de pachet Node.js 12.7+. În TypeScript, setați rezoluția corectă a modulelor:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}Pentru proiecte ESM, folosiți "module": "ES2022" și "moduleResolution": "bundler".
Pasul 3: Depanați o scenă goală după încărcare
Dacă scene.rootNode.childNodes este gol după 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}`);Cauze comune:
- Opțiuni de format incorecte: pentru OBJ, treceți întotdeauna
new ObjLoadOptions(). Utilizarea opțiunilor generice poate împiedica detectarea formatului. - Calea fișierului este greșită: biblioteca încarcă în tăcere o scenă goală dacă fișierul nu este găsit:
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());- Fișierul OBJ folosește sfârșituri de linie non-standard: deschideți într-un editor de text și asigurați-vă că fișierul este valid.
Pasul 4: Remediați problemele sistemului de coordonate
Modelele pot apărea rotite, oglindite sau scalate incorect din cauza diferențelor de sistem de coordonate între formate.
Dreapta vs stânga, Y sus vs Z sus:
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);Probleme de scară (de ex., STL în milimetri vs glTF în metri):
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);Pasul 5: Gestionați problemele de memorie cu fișiere mari
Pentru fișiere mai mari de 100 MB, măriți dimensiunea heap-ului Node.js:
node --max-old-space-size=4096 convert.jsSau setați-l în package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Procesați fișierele mari unul câte unul, în loc de paralel, pentru a evita problemele de memorie la vârf.
Referință comună a erorilor
| Eroare | Cauză Probabilă | Remediere |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Configurație de rezolvare a modulelor | Setați moduleResolution: node16 în tsconfig |
scene.rootNode.childNodes este gol | Opțiuni incorecte sau fișierul nu a fost găsit | Verificați calea fișierului; furnizați una corectă *LoadOptions |
| Geometria pare oglindită/inversată | Neconcordanță a sistemului de coordonate | Setare flipCoordinateSystem = true |
| Geometria pare scalată incorect | Diferență de unitate între formate | Setare scale în opțiunile de încărcare |
ENOMEM sau procesul a fost terminat | Memorie insuficientă pentru fișier mare | Mărește --max-old-space-size |
Eroare de tip TypeScript pe node.entity | Tip de entitate larg | Folosește instanceof Mesh guard |
Întrebări frecvente
Cum raportez o eroare de parsare?
Deschide un issue pe repo GitHub cu numele formatului, un fișier minimal reproducibil și mesajul exact al erorii.
De ce unele mesh-uri au zero puncte de control?
Unele grupuri OBJ definesc doar coordonate de textură sau normale fără date de poziție. Verifică mesh.controlPoints.length > 0 înainte de procesare.
Biblioteca ignoră în tăcere erorile de parsare. Cum le pot detecta?
Înfășoară scene.open() într-un bloc try/catch. Dacă fișierul este malformat, biblioteca poate arunca o excepție sau încărca o scenă parțială:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}