Cum să remediați erorile modelelor 3D în TypeScript

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 version

Dacă pachetul nu este găsit, reinstalați:

npm install @aspose/3d

Pasul 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:

  1. Opțiuni de format incorecte: pentru OBJ, treceți întotdeauna new ObjLoadOptions(). Utilizarea opțiunilor generice poate împiedica detectarea formatului.
  2. 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());
  1. 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.js

Sau 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

EroareCauză ProbabilăRemediere
Cannot find module '@aspose/3d/formats/obj'Configurație de rezolvare a modulelorSetați moduleResolution: node16 în tsconfig
scene.rootNode.childNodes este golOpțiuni incorecte sau fișierul nu a fost găsitVerificați calea fișierului; furnizați una corectă *LoadOptions
Geometria pare oglindită/inversatăNeconcordanță a sistemului de coordonateSetare flipCoordinateSystem = true
Geometria pare scalată incorectDiferență de unitate între formateSetare scale în opțiunile de încărcare
ENOMEM sau procesul a fost terminatMemorie insuficientă pentru fișier mareMărește --max-old-space-size
Eroare de tip TypeScript pe node.entityTip de entitate largFoloseș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);
}

Vezi și

 Română