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 versionSi el paquete no se encuentra, reinstálalo:
npm install @aspose/3dPaso 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:
- Opciones de formato incorrectas: para OBJ, siempre pasa
new ObjLoadOptions(). Usar opciones genéricas puede impedir la detección del formato. - 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());- 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.jsO 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
| Error | Causa probable | Solución |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Configuración de resolución de módulos | Establecer moduleResolution: node16 en tsconfig |
scene.rootNode.childNodes está vacío | Opciones incorrectas o archivo no encontrado | Verifique la ruta del archivo; pase la correcta *LoadOptions |
| La geometría parece reflejada/invertida | Desajuste del sistema de coordenadas | Establecer flipCoordinateSystem = true |
| La geometría parece escalada incorrectamente | Diferencia de unidades entre formatos | Establecer scale en opciones de carga |
ENOMEM o proceso finalizado | Memoria insuficiente para archivo grande | Aumentar --max-old-space-size |
Error de tipo de TypeScript en node.entity | Tipo de entidad amplio | Usar 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);
}