Como Corrigir Erros de Modelos 3D em TypeScript

Como Corrigir Erros de Modelos 3D em TypeScript

Este guia cobre os erros mais comuns ao usar @aspose/3d para TypeScript e Node.js, com correções práticas para cada um.

Guia passo a passo

Etapa 1: Verificar Instalação e Versões

Certifique‑se de que está usando uma versão suportada do Node.js (18, 20 ou 22) e que o pacote está instalado:

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

Se o pacote não for encontrado, reinstale:

npm install @aspose/3d

Etapa 2: Corrigir Erros de Resolução de Módulos

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

Importações de subcaminho requerem exportações de pacote do Node.js 12.7+. No TypeScript, configure a resolução de módulo correta:

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

Para projetos ESM, use "module": "ES2022" e "moduleResolution": "bundler".


Etapa 3: Depurar uma Cena Vazia Após o Carregamento

Se scene.rootNode.childNodes estiver vazio após 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 comuns:

  1. Opções de formato incorretas: para OBJ, sempre passe new ObjLoadOptions(). Usar opções genéricas pode impedir a detecção de formato.
  2. O caminho do arquivo está errado: a biblioteca carrega silenciosamente uma cena vazia se o arquivo não for encontrado:
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. Arquivo OBJ usa quebras de linha não padrão: abra em um editor de texto e garanta que o arquivo seja válido.

Etapa 4: Corrigir Problemas de Sistema de Coordenadas

Os modelos podem aparecer rotacionados, espelhados ou dimensionados incorretamente devido a diferenças no sistema de coordenadas entre os formatos.

Direita vs esquerda, Y para cima vs Z para cima:

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 (por exemplo, STL em milímetros vs glTF em 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);

Etapa 5: Lidar com Problemas de Memória em Arquivos Grandes

Para arquivos maiores que 100 MB, aumente o tamanho do heap do Node.js:

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

Ou defina isso em package.json:

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

Processar arquivos grandes um de cada vez em vez de em paralelo para evitar picos de uso de memória.


Referência de Erros Comuns

ErroCausa ProvávelCorreção
Cannot find module '@aspose/3d/formats/obj'Configuração de resolução de móduloDefinir moduleResolution: node16 no tsconfig
scene.rootNode.childNodes está vazioOpções incorretas ou arquivo não encontradoVerifique o caminho do arquivo; passe o correto *LoadOptions
A geometria parece espelhada/invertidaIncompatibilidade de sistema de coordenadasDefinir flipCoordinateSystem = true
A geometria parece dimensionada incorretamenteDiferença de unidades entre formatosDefinir scale nas opções de carregamento
ENOMEM ou processo encerradoMemória insuficiente para arquivo grandeAumentar --max-old-space-size
Erro de tipo TypeScript em node.entityTipo de entidade amploUsar instanceof Mesh guarda

Perguntas Frequentes

Como reportar um bug de parsing?

Abra uma issue no repositório do GitHub com o nome do formato, um arquivo mínimo reproduzível e a mensagem de erro exata.

Por que algumas malhas têm zero pontos de controle?

Alguns grupos OBJ definem apenas coordenadas de textura ou normais sem dados de posição. Verifique mesh.controlPoints.length > 0 antes do processamento.

A biblioteca ignora silenciosamente erros de parsing. Como detectá-los?

Envolver scene.open() em um bloco try/catch. Se o arquivo estiver malformado, a biblioteca pode lançar uma exceção ou carregar uma cena parcial:

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

Veja também

 Português