Come correggere gli errori dei modelli 3D in TypeScript

Come correggere gli errori dei modelli 3D in TypeScript

Questa guida copre gli errori più comuni quando si utilizza @aspose/3d per TypeScript e Node.js, con soluzioni pratiche per ciascuno.

Guida passo-passo

Passo 1: Verifica l’installazione e le versioni

Assicurati di utilizzare una versione supportata di Node.js (18, 20 o 22) e che il pacchetto sia installato:

node --version          # Must be v18 or later
npm list @aspose/3d     # Should show the installed version

Se il pacchetto non viene trovato, reinstalla:

npm install @aspose/3d

Passo 2: Correggi gli errori di risoluzione dei moduli

Errore: Cannot find module '@aspose/3d/formats/obj'

Le importazioni di sotto‑percorso richiedono esportazioni del pacchetto Node.js 12.7+. In TypeScript, imposta la corretta risoluzione dei moduli:

// tsconfig.json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "moduleResolution": "node16",
    "strict": true
  }
}

Per i progetti ESM, usa "module": "ES2022" e "moduleResolution": "bundler".


Passo 3: Debug di una scena vuota dopo il caricamento

Se scene.rootNode.childNodes è vuoto dopo 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}`);

Cause comuni:

  1. Opzioni di formato errate: per OBJ, passa sempre new ObjLoadOptions(). L’uso di opzioni generiche può impedire il rilevamento del formato.
  2. Il percorso del file è errato: la libreria carica silenziosamente una scena vuota se il file non viene trovato:
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. Il file OBJ utilizza terminazioni di riga non standard: apri in un editor di testo e assicurati che il file sia valido.

Passo 4: Correggi i problemi del sistema di coordinate

I modelli possono apparire ruotati, specchiati o scalati in modo errato a causa delle differenze del sistema di coordinate tra i formati.

Destra vs sinistra, 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);

Problemi di scala (ad es., STL in millimetri vs glTF in 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);

Passo 5: Gestisci i problemi di memoria con file di grandi dimensioni

Per file più grandi di 100 MB, aumenta la dimensione dell’heap di Node.js:

node --max-old-space-size=4096 convert.js

Oppure impostalo in package.json:

{
  "scripts": {
    "convert": "node --max-old-space-size=4096 dist/convert.js"
  }
}

Elabora i file di grandi dimensioni uno alla volta invece che in parallelo per evitare picchi di memoria.


Riferimento errori comuni

ErroreCausa probabileCorrezione
Cannot find module '@aspose/3d/formats/obj'Configurazione risoluzione moduloImposta moduleResolution: node16 in tsconfig
scene.rootNode.childNodes è vuotoOpzioni errate o file non trovatoVerifica il percorso del file; passa quello corretto *LoadOptions
La geometria sembra specchiata/invertitaMancata corrispondenza del sistema di coordinateImposta flipCoordinateSystem = true
La geometria sembra scalata in modo erratoDifferenza di unità tra i formatiImposta scale nelle opzioni di caricamento
ENOMEM o processo terminatoMemoria insufficiente per file di grandi dimensioniAumenta --max-old-space-size
Errore di tipo TypeScript su node.entityTipo di entità genericoUsa instanceof Mesh guard

Domande frequenti

Come segnalare un bug di parsing?

Apri un issue su repository GitHub con il nome del formato, un file minimo riproducibile e il messaggio di errore esatto.

Perché alcune mesh hanno zero punti di controllo?

Alcuni gruppi OBJ definiscono solo coordinate di texture o normali senza dati di posizione. Controlla mesh.controlPoints.length > 0 prima dell’elaborazione.

La libreria ignora silenziosamente gli errori di parsing. Come posso rilevarli?

Racchiudi scene.open() in un blocco try/catch. Se il file è malformato, la libreria potrebbe lanciare un’eccezione o caricare una scena parziale:

try {
    scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
    console.error('Failed to load:', err);
}

Vedi anche

 Italiano