Com corregir errors de models 3D a TypeScript
Aquesta guia cobreix els errors més comuns quan s’utilitza @aspose/3d per a TypeScript i Node.js, amb solucions pràctiques per a cadascun.
Guia pas a pas
Pas 1: Verifica la instal·lació i les versions
Assegura’t que estàs en una versió compatible de Node.js (18, 20 o 22) i que el paquet està instal·lat:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionSi el paquet no es troba, reinstal·la’l:
npm install @aspose/3dPas 2: Corregeix els errors de resolució de mòduls
Error: Cannot find module '@aspose/3d/formats/obj'
Les importacions de subcamins requereixen exportacions de paquet de Node.js 12.7+. En TypeScript, estableix la resolució de mòduls correcta:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}Per a projectes ESM, utilitzeu "module": "ES2022" i "moduleResolution": "bundler".
Pas 3: Depura una escena buida després de carregar
Si scene.rootNode.childNodes està buit després de 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}`);Causes comunes:
- Opcions de format incorrectes: per a OBJ, sempre passa
new ObjLoadOptions(). L’ús d’opcions genèriques pot impedir la detecció del format. - El camí del fitxer és incorrecte: la llibreria carrega silenciosament una escena buida si el fitxer no es troba:
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());- El fitxer OBJ utilitza salts de línia no estàndard: obre’l en un editor de text i assegura’t que el fitxer sigui vàlid.
Pas 4: Solucionar problemes del sistema de coordenades
Els models poden aparèixer girats, mirallats o escalats incorrectament a causa de diferències en el sistema de coordenades entre formats.
Mà dreta vs mà esquerra, Y amunt vs Z amunt:
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);Problemes d’escala (p. ex., STL en mil·límetres vs glTF en metres):
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);Pas 5: Gestionar problemes de memòria amb fitxers grans
Per a fitxers superiors a 100 MB, augmenta la mida del heap de Node.js:
node --max-old-space-size=4096 convert.jsO estableix-lo a package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Processa fitxers grans d’un en un en lloc de paral·lelament per evitar pics de memòria.
Referència d’errors comuns
| Error | Causa probable | Solució |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Configuració de resolució de mòduls | Estableix moduleResolution: node16 a tsconfig |
scene.rootNode.childNodes està buit | Opcions incorrectes o fitxer no trobat | Comproveu el camí del fitxer; passeu el correcte *LoadOptions |
| La geometria sembla mirallada/invertida | Desajust del sistema de coordenades | Establir flipCoordinateSystem = true |
| La geometria sembla escalada incorrectament | Diferència d’unitats entre formats | Establir scale a les opcions de càrrega |
ENOMEM o procés finalitzat | Memòria insuficient per a fitxer gran | Incrementa --max-old-space-size |
Error de tipus TypeScript a node.entity | Tipus d’entitat ampli | Utilitza instanceof Mesh guard |
Preguntes freqüents
Com puc informar d’un error d’anàlisi?
Obre una incidència al repositori GitHub amb el nom del format, un fitxer mínim reproduïble i el missatge d’error exacte.
Per què alguns malles tenen zero punts de control?
Alguns grups OBJ defineixen només coordenades de textura o normals sense dades de posició. Comproveu mesh.controlPoints.length > 0 abans del processament.
La biblioteca ignora silenciosament els errors d’anàlisi. Com els puc detectar?
Envolta scene.open() en un bloc try/catch. Si el fitxer està mal format, la biblioteca pot llançar una excepció o carregar una escena parcial:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}