Comment convertir des modèles 3D en TypeScript

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 .fbx n’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 .fbx passé à 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 niveau open()/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 \ VersglTF/GLBOBJSTLFBX3MFCOLLADA
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.


Voir aussi

 Français