Comment corriger les erreurs de modèle 3D en TypeScript

Comment corriger les erreurs de modèle 3D en TypeScript

Ce guide couvre les erreurs les plus courantes lors de l’utilisation de @aspose/3d pour TypeScript et Node.js, avec des solutions pratiques pour chacune.

Guide étape par étape

Étape 1 : Vérifier l’installation et les versions

Assurez-vous d’utiliser une version prise en charge de Node.js (18, 20 ou 22) et que le package est installé :

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

Si le package n’est pas trouvé, réinstallez :

npm install @aspose/3d

Étape 2 : Corriger les erreurs de résolution de modules

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

Les importations de sous‑chemin nécessitent les exportations de package Node.js 12.7+. En TypeScript, définissez la résolution de module correcte :

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

Pour les projets ESM, utilisez "module": "ES2022" et "moduleResolution": "bundler".


Étape 3 : Déboguer une scène vide après le chargement

Si scene.rootNode.childNodes est vide aprè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}`);

Causes courantes :

  1. Mauvaises options de format: pour OBJ, passez toujours new ObjLoadOptions(). L’utilisation d’options génériques peut empêcher la détection du format.

  2. Chemin du fichier incorrect: la bibliothèque charge silencieusement une scène vide si le fichier n’est pas trouvé:

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. Le fichier OBJ utilise des fins de ligne non standard : ouvrez-le dans un éditeur de texte et assurez‑vous que le fichier est valide.

Étape 4 : Corriger les problèmes de système de coordonnées

Les modèles peuvent apparaître tournés, reflétés ou mis à l’échelle de manière incorrecte en raison de différences de système de coordonnées entre les formats.

Main droite vs main gauche, 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);

Problèmes d’échelle (p. ex., STL en millimètres vs glTF en mètres) :

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

Étape 5 : Gérer les problèmes de mémoire avec les gros fichiers

Pour les fichiers de plus de 100 Mo, augmentez la taille du tas Node.js :

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

Ou définissez‑le dans package.json:

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

Traitez les gros fichiers un à la fois plutôt qu’en parallèle afin d’éviter les problèmes de pic de mémoire.


Référence d’erreur courante

ErreurCause probableSolution
Cannot find module '@aspose/3d/formats/obj'Configuration de résolution du moduleDéfinir moduleResolution: node16 dans tsconfig
scene.rootNode.childNodes est videOptions incorrectes ou fichier introuvableVérifier le chemin du fichier ; fournir le *LoadOptions correct
La géométrie apparaît miroir/inverséeIncompatibilité du système de coordonnéesDéfinir flipCoordinateSystem = true
La géométrie apparaît mal mise à l’échelleDifférence d’unités entre les formatsDéfinir scale dans les options de chargement
ENOMEM ou processus interrompuMémoire insuffisante pour un fichier volumineuxAugmenter --max-old-space-size
Erreur de type TypeScript sur node.entityType d’entité trop génériqueUtiliser la garde instanceof Mesh

Foire aux questions

Comment signaler un bug d’analyse ?

Ouvrez une issue sur le dépôt GitHub avec le nom du format, un fichier minimal reproductible et le message d’erreur exact.

Pourquoi certains maillages ont-ils zéro point de contrôle ?

Certains groupes OBJ définissent uniquement des coordonnées de texture ou des normales sans données de position. Vérifiez mesh.controlPoints.length > 0 avant le traitement.

La bibliothèque ignore silencieusement les erreurs d’analyse. Comment les détecter ?

Enveloppez scene.open() dans un bloc try/catch. Si le fichier est malformé, la bibliothèque peut lever une exception ou charger une scène partielle :

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

Voir aussi

 Français