Com corregir errors de models 3D a TypeScript

Com corregir errors de models 3D a TypeScript

Aquesta guia cobreix els errors més comuns en utilitzar @aspose/3d per a TypeScript i Node.js, amb solucions pràctiques per a cadascun.

Guia pas a pas

Pas 1: Verificar la instal·lació i les versions

Assegureu-vos que esteu en una versió compatible de Node.js (18, 20 o 22) i que el paquet estigui instal·lat:

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

Si el paquet no es troba, reinstal·la:

npm install @aspose/3d

Pas 2: Solucionar errors de resolució de mòduls

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

Les importacions de subcamins requereixen exportacions de paquets de Node.js 12.7+. En TypeScript, establiu la resolució de mòduls correcta:

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

Per als 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 comuns:

  1. Opcions de format incorrectes: per a OBJ, sempre passa new ObjLoadOptions(). L’ús d’opcions genèriques pot impedir la detecció del format.

  2. El camí del fitxer és incorrecte: la biblioteca carrega silenciosament una escena buida si no es troba el fitxer:

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. El fitxer OBJ utilitza terminacions de línia no estàndard: obre’l en un editor de text i assegura’t que el fitxer sigui vàlid.

Pas 4: Corregir problemes del sistema de coordenades

Els models poden aparèixer girats, reflectits o escalats incorrectament a causa de diferències en el sistema de coordenades entre formats.

Dreta vs esquerra, 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);

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: Gestiona els problemes de memòria amb fitxers grans

Per a fitxers de més de 100 MB, augmenta la mida del heap de Node.js:

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

O establiu‑ho a package.json:

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

Processa fitxers grans un a un en lloc d’en paral·lel per evitar problemes de memòria màxima.


Referència d’error comú

ErrorPossible causaSolució
Cannot find module '@aspose/3d/formats/obj'Configuració de resolució de mòdulsEstableix moduleResolution: node16 a tsconfig
scene.rootNode.childNodes està buitOpcions incorrectes o fitxer no trobatComprova el camí del fitxer; passa el *LoadOptions correcte
La geometria apareix reflectida/invertidaDesajust del sistema de coordenadesEstableix flipCoordinateSystem = true
La geometria apareix escalada incorrectamentDiferència d’unitats entre formatsEstableix scale a les opcions de càrrega
ENOMEM o procés finalitzatMemòria insuficient per a fitxer granIncrementa --max-old-space-size
Error de tipus TypeScript a node.entityTipus d’entitat ampliUtilitza la protecció instanceof Mesh

Preguntes freqüents

Com puc informar d’un error d’anàlisi?

Obre una incidència al repositori de 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?

Envoluiu 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);
}

Vegeu també

 Català