Cómo corregir errores de modelos 3D en TypeScript

Cómo corregir errores de modelos 3D en TypeScript

Esta guía cubre los errores más comunes al usar @aspose/3d para TypeScript y Node.js, con soluciones prácticas para cada uno.

Guía paso a paso

Paso 1: Verificar la instalación y versiones

Asegúrate de estar en una versión compatible de Node.js (18, 20 o 22) y de que el paquete esté instalado:

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

Si el paquete no se encuentra, reinstálalo:

npm install @aspose/3d

Paso 2: Corregir errores de resolución de módulos

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

Las importaciones de subruta requieren exportaciones de paquete de Node.js 12.7+. En TypeScript, establece la resolución de módulo correcta:

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

Para proyectos ESM, use "module": "ES2022" y "moduleResolution": "bundler".


Paso 3: Depurar una escena vacía después de cargar

Si scene.rootNode.childNodes está vacío despué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}`);

Causas comunes:

  1. Opciones de formato incorrectas: para OBJ, siempre pasa new ObjLoadOptions(). Usar opciones genéricas puede impedir la detección del formato.
  2. La ruta del archivo es incorrecta: la biblioteca carga silenciosamente una escena vacía si no se encuentra el archivo:
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 archivo OBJ usa finales de línea no estándar: ábrelo en un editor de texto y asegúrate de que el archivo sea válido.

Paso 4: Corregir problemas del sistema de coordenadas

Los modelos pueden aparecer rotados, reflejados o escalados incorrectamente debido a diferencias en el sistema de coordenadas entre formatos.

Derecha vs izquierda, Y-arriba vs Z-arriba:

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

Problemas de escala (p. ej., STL en milímetros vs glTF en metros):

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

Paso 5: Gestionar problemas de memoria con archivos grandes

Para archivos mayores de 100 MB, aumente el tamaño del heap de Node.js:

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

O configúralo en package.json:

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

Procese los archivos grandes uno a la vez en lugar de en paralelo para evitar picos de uso de memoria.


Referencia de errores comunes

ErrorCausa probableSolución
Cannot find module '@aspose/3d/formats/obj'Configuración de resolución de módulosEstablecer moduleResolution: node16 en tsconfig
scene.rootNode.childNodes está vacíoOpciones incorrectas o archivo no encontradoVerifique la ruta del archivo; pase la correcta *LoadOptions
La geometría parece reflejada/invertidaDesajuste del sistema de coordenadasEstablecer flipCoordinateSystem = true
La geometría parece escalada incorrectamenteDiferencia de unidades entre formatosEstablecer scale en opciones de carga
ENOMEM o proceso finalizadoMemoria insuficiente para archivo grandeAumentar --max-old-space-size
Error de tipo de TypeScript en node.entityTipo de entidad amplioUsar instanceof Mesh guard

Preguntas frecuentes

¿Cómo informo de un error de análisis?

Abrir un issue en el repositorio de GitHub con el nombre del formato, un archivo reproducible mínimo y el mensaje de error exacto.

¿Por qué algunas mallas tienen cero puntos de control?

Algunos grupos OBJ definen solo coordenadas de textura o normales sin datos de posición. Verifica mesh.controlPoints.length > 0 antes de procesar.

La biblioteca ignora silenciosamente los errores de análisis. ¿Cómo puedo detectarlos?

Envolver scene.open() en un bloque try/catch. Si el archivo está malformado, la biblioteca puede lanzar una excepción o cargar una escena parcial:

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

Ver también

 Español