Come convertire modelli 3D in TypeScript

Come convertire modelli 3D in TypeScript

Aspose.3D FOSS for TypeScript converte tra formati 3D caricando in una rappresentazione neutra Scene e salvando nel formato di destinazione. Questa guida mostra le conversioni più comuni.

Guida passo-passo

Passo 1: Installa @aspose/3d

npm install @aspose/3d

Passo 2: Carica il file di origine

Crea un Scene e chiama scene.open(). Usa la classe *LoadOptions specifica del formato per ottenere i migliori risultati.

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

Passo 3: Salva nel formato di destinazione

Chiama scene.save() con il percorso di output. Il formato di output viene rilevato dall’estensione del file.

// OBJ → glTF binary (GLB)
scene.save('output.glb');

// OBJ → STL
scene.save('output.stl');

// OBJ → COLLADA
scene.save('output.dae');

Nota: FBX non è supportato dal rilevamento automatico scene.save(). L’estensione .fbx non è collegata a nessun esportatore — salvare in .fbx scrive silenziosamente contenuto in formato OBJ. Usa OBJ, glTF, STL, 3MF o COLLADA per un output affidabile.


Passo 4: Esempi di conversione comuni

OBJ a 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 supportato

Il rilevamento automatico di FBX non è integrato in scene.open(). Un file .fbx passato a scene.open() non viene riconosciuto da alcun rilevatore di formato e ricade nel parser STL, che fallirà o produrrà spazzatura. Le classi di importazione/esportazione FBX esistono nella libreria ma richiedono un’invocazione diretta anziché l’API di alto livello open()/save(). Utilizza COLLADA, OBJ o glTF come alternativa a FBX.

glTF a STL

import { Scene } from '@aspose/3d';

const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');

COLLADA in 3MF

import { Scene } from '@aspose/3d';

const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');

Passo 5: Conversione batch di più file

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 di conversione supportata

Da \ AglTF/GLBOBJSTLFBX3MFCOLLADA
OBJ
glTF/GLB
FBX
STL
3MF
COLLADA

FBX non è supportato tramite l’API di alto livello open()/save() — il formato non è integrato nella rilevazione automatica. Tutte le celle FBX sopra sono ✗.


Problemi comuni e soluzioni

I materiali vengono persi dopo la conversione

I materiali OBJ (usemtl, .mtl file) vengono caricati quando ObjLoadOptions.enableMaterials = true. Durante il salvataggio in glTF, le proprietà dei materiali PBR vengono mappate automaticamente. I materiali complessi (procedurali, multistrato) possono essere convertiti con fedeltà ridotta.

La mesh appare scalata in modo errato

I diversi formati utilizzano unità predefinite diverse (millimetri per STL, metri per glTF). Usa ObjLoadOptions.scale durante il caricamento o StlSaveOptions.scaleFactor durante il salvataggio per normalizzare le unità.

Discrepanza del sistema di coordinate (modello capovolto o ruotato)

Alcuni formati usano l’asse Y verso l’alto con mano destra, altri Z verso l’alto. Usa ObjLoadOptions.flipCoordinateSystem = true o applica una rotazione al nodo radice dopo il caricamento.


Domande Frequenti

La conversione conserva le animazioni?

I dati di animazione vengono conservati durante la conversione tra formati che li supportano (ad es., COLLADA → glTF). STL e OBJ non contengono dati di animazione. FBX non è supportato tramite scene.open()/scene.save(), quindi i round‑trip di animazione FBX non sono disponibili tramite l’API di alto livello.

I dati della texture sono conservati?

Le texture referenziate dai materiali OBJ o incorporate in glTF vengono trasferite al grafo della scena. Quando si salva in GLB (binaryMode = true), il buffer binario è incorporato in un unico file. Per l’output OBJ, le texture vengono salvate come file separati accanto al .obj.

Posso convertire molti file in parallelo?

scene.open() e scene.save() sono sincroni. Usa Node.js worker_threads per l’elaborazione parallela.


Vedi anche

 Italiano