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 correctifs pratiques pour chacun.
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 paquet est installé :
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionSi le paquet 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‑chemins nécessitent les exportations de paquet 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 :
- Options de format incorrectes: pour OBJ, passez toujours
new ObjLoadOptions(). L’utilisation d’options génériques peut empêcher la détection du format. - Le chemin du fichier est 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());- 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 façon incorrecte en raison des différences de système de coordonnées entre les formats.
Main droite vs main gauche, Y vers le haut vs Z vers le haut :
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.jsOu définissez‑le dans package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Traitez les gros fichiers un par un plutôt qu’en parallèle afin d’éviter les pics de mémoire.
Référence des erreurs courantes
| Erreur | Cause probable | Correction |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Configuration de résolution de module | Définir moduleResolution: node16 dans tsconfig |
scene.rootNode.childNodes est vide | Options incorrectes ou fichier introuvable | Vérifiez le chemin du fichier ; transmettez le bon *LoadOptions |
| La géométrie apparaît miroir/inversée | Incompatibilité du système de coordonnées | Définir flipCoordinateSystem = true |
| La géométrie apparaît mal mise à l’échelle | Différence d’unité entre les formats | Définir scale dans les options de chargement |
ENOMEM ou processus interrompu | Mémoire insuffisante pour le fichier volumineux | Augmenter --max-old-space-size |
Erreur de type TypeScript sur node.entity | Type d’entité large | Utiliser instanceof Mesh garde |
Questions fréquentes
Comment signaler un bug d’analyse ?
Ouvrez un ticket 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 ?
Certaines groupes OBJ ne définissent que 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 ?
Envelopper 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);
}