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 versionSe o pacote não for encontrado, reinstale:
npm install @aspose/3dEtapa 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:
- Opções de formato incorretas: para OBJ, sempre passe
new ObjLoadOptions(). Usar opções genéricas pode impedir a detecção de formato. - 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());- 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.jsOu 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
| Erro | Causa Provável | Correção |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Configuração de resolução de módulo | Definir moduleResolution: node16 no tsconfig |
scene.rootNode.childNodes está vazio | Opções incorretas ou arquivo não encontrado | Verifique o caminho do arquivo; passe o correto *LoadOptions |
| A geometria parece espelhada/invertida | Incompatibilidade de sistema de coordenadas | Definir flipCoordinateSystem = true |
| A geometria parece dimensionada incorretamente | Diferença de unidades entre formatos | Definir scale nas opções de carregamento |
ENOMEM ou processo encerrado | Memória insuficiente para arquivo grande | Aumentar --max-old-space-size |
Erro de tipo TypeScript em node.entity | Tipo de entidade amplo | Usar 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);
}