Comment convertir des modèles 3D en TypeScript
Aspose.3D FOSS for TypeScript convertit entre les formats 3D en chargeant dans une représentation neutre Scene et en enregistrant dans le format cible. Ce guide montre les conversions les plus courantes.
Guide étape par étape
Étape 1 : Installer @aspose/3d
npm install @aspose/3dÉtape 2 : Charger le fichier source
Créez un Scene et appelez scene.open(). Utilisez la classe *LoadOptions spécifique au format pour de meilleurs résultats.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
scene.open('model.obj', opts);Étape 3 : Enregistrer au format cible
Appelez scene.save() avec le chemin de sortie. Le format de sortie est détecté à partir de l’extension du fichier.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Note : FBX est pas pris en charge par
scene.save()auto‑détection. L’extension.fbxn’est pas reliée à aucun exportateur — l’enregistrement vers.fbxécrit silencieusement du contenu au format OBJ à la place. Utilisez OBJ, glTF, STL, 3MF ou COLLADA pour une sortie fiable.
Étape 4 : Exemples de conversion courants
OBJ vers glTF / GLB
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
scene.save('model.glb');
console.log('Converted OBJ → GLB');FBX — Non pris en charge
La détection automatique du FBX n’est pas intégrée dans
scene.open(). Un fichier.fbxpassé àscene.open()n’est reconnu par aucun détecteur de format et tombe sur l’analyseur STL, qui échouera ou produira des données corrompues. Les classes d’importation/exportation FBX existent dans la bibliothèque mais nécessitent une invocation directe plutôt que l’API de haut niveauopen()/save(). Utilisez COLLADA, OBJ ou glTF comme alternative au FBX.
glTF vers STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA vers 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Étape 5 : conversion par lots de plusieurs fichiers
import * as fs from 'fs';
import * as path from 'path';
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const inputDir = './input';
const outputDir = './output';
fs.mkdirSync(outputDir, { recursive: true });
const objFiles = fs.readdirSync(inputDir).filter(f => f.endsWith('.obj'));
for (const file of objFiles) {
const inputPath = path.join(inputDir, file);
const outputFile = file.replace('.obj', '.glb');
const outputPath = path.join(outputDir, outputFile);
const scene = new Scene();
scene.open(inputPath, new ObjLoadOptions());
scene.save(outputPath);
console.log(`Converted ${file} → ${outputFile}`);
}Matrice de conversion prise en charge
| De \ Vers | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX n’est pas pris en charge via l’API de haut niveau open()/save() — le format n’est pas intégré à la détection automatique. Toutes les cellules FBX ci‑dessus sont ✗.
Problèmes courants et solutions
Les matériaux sont perdus après la conversion
Les matériaux OBJ (usemtl, .mtl fichier) sont chargés lorsque ObjLoadOptions.enableMaterials = true. Lors de l’enregistrement au format glTF, les propriétés de matériau PBR sont mappées automatiquement. Les matériaux complexes (procéduraux, multi-couches) peuvent être convertis avec une fidélité réduite.
Le maillage apparaît mal mis à l’échelle
Différents formats utilisent des unités par défaut différentes (millimètres pour STL, mètres pour glTF). Utilisez ObjLoadOptions.scale lors du chargement ou StlSaveOptions.scaleFactor lors de l’enregistrement pour normaliser les unités.
Incompatibilité du système de coordonnées (modèle inversé ou tourné)
Certains formats utilisent Y‑up à droite, d’autres Z‑up. Utilisez ObjLoadOptions.flipCoordinateSystem = true ou appliquez une rotation au nœud racine après le chargement.
Questions fréquentes
La conversion préserve-t-elle les animations ?
Les données d’animation sont conservées lors de la conversion entre des formats qui les prennent en charge (p. ex., COLLADA → glTF). STL et OBJ ne transportent pas de données d’animation. FBX n’est pas pris en charge via scene.open()/scene.save(), ainsi les allers‑retours d’animation FBX ne sont pas disponibles via l’API de haut niveau.
Les données de texture sont‑elles conservées ?
Les textures référencées par les matériaux OBJ ou intégrées dans le glTF sont conservées dans le graphe de scène. Lors de l’enregistrement au format GLB (binaryMode = true), le tampon binaire est intégré dans un seul fichier. Pour la sortie OBJ, les textures sont enregistrées en tant que fichiers séparés à côté du .obj.
Puis-je convertir plusieurs fichiers en parallèle ?
scene.open() et scene.save() sont synchrones. Utilisez Node.js worker_threads pour le traitement parallèle.