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 versionSe il pacchetto non viene trovato, reinstalla:
npm install @aspose/3dPasso 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:
- Opzioni di formato errate: per OBJ, passa sempre
new ObjLoadOptions(). L’uso di opzioni generiche può impedire il rilevamento del formato. - 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());- 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.jsOppure 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
| Errore | Causa probabile | Correzione |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Configurazione risoluzione modulo | Imposta moduleResolution: node16 in tsconfig |
scene.rootNode.childNodes è vuoto | Opzioni errate o file non trovato | Verifica il percorso del file; passa quello corretto *LoadOptions |
| La geometria sembra specchiata/invertita | Mancata corrispondenza del sistema di coordinate | Imposta flipCoordinateSystem = true |
| La geometria sembra scalata in modo errato | Differenza di unità tra i formati | Imposta scale nelle opzioni di caricamento |
ENOMEM o processo terminato | Memoria insufficiente per file di grandi dimensioni | Aumenta --max-old-space-size |
Errore di tipo TypeScript su node.entity | Tipo di entità generico | Usa 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);
}