Cum să convertești modele 3D în TypeScript

Cum să convertești modele 3D în TypeScript

Aspose.3D FOSS for TypeScript convertește între formatele 3D prin încărcarea într-o reprezentare neutră Scene și salvarea în formatul țintă. Acest ghid prezintă cele mai comune conversii.

Ghid pas cu pas

Pasul 1: Instalați @aspose/3d

npm install @aspose/3d

Pasul 2: Încarcă fișierul sursă

Creează un Scene și apelează scene.open(). Folosește clasa *LoadOptions specifică formatului pentru cele mai bune rezultate.

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

Pasul 3: Salvează în formatul țintă

Apelă scene.save() cu calea de ieșire. Formatul de ieșire este detectat din extensia fișierului.

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

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

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

Notă: FBX nu este acceptat de scene.save() auto-detectare. Extensia .fbx nu este conectată la niciun exportator — salvarea în .fbx scrie în mod silențios conținut în format OBJ în schimb. Folosiți OBJ, glTF, STL, 3MF sau COLLADA pentru o ieșire fiabilă.


Pasul 4: Exemple comune de conversie

OBJ în 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 — Nu este acceptat

Detecția automată FBX nu este integrată în scene.open(). Un fișier .fbx transmis către scene.open() nu este recunoscut de niciun detector de format și cade la parserul STL, care va eșua sau va produce date inutile. Clasele de import/export FBX există în bibliotecă, dar necesită invocare directă în locul API-ului de nivel înalt open()/save(). Folosiți COLLADA, OBJ sau glTF ca alternativă la FBX.

glTF în STL

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

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

COLLADA la 3MF

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

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

Pasul 5: Conversie în lot a mai multor fișiere

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 conversie acceptată

De \ CătreglTF/GLBOBJSTLFBX3MFCOLLADA
OBJ
glTF/GLB
FBX
STL
3MF
COLLADA

FBX nu este suportat prin API‑ul de nivel înalt open()/save() — formatul nu este integrat în detectarea automată. Toate celulele FBX de mai sus sunt ✗.


Probleme comune și soluții

Materialele se pierd după conversie

Materialele OBJ (usemtl, .mtl fișier) sunt încărcate când ObjLoadOptions.enableMaterials = true. La salvarea în glTF, proprietățile materialului PBR sunt mapate automat. Materialele complexe (procedurale, multi‑strat) pot fi convertite cu fidelitate redusă.

Mesh apare scalat incorect

Formatele diferite utilizează unități implicite diferite (milimetri pentru STL, metri pentru glTF). Utilizați ObjLoadOptions.scale la încărcare sau StlSaveOptions.scaleFactor la salvare pentru a normaliza unitățile.

Neconcordanță a sistemului de coordonate (model întors sau rotit)

Unele formate folosesc Y‑up cu mâna dreaptă, altele Z‑up. Folosiți ObjLoadOptions.flipCoordinateSystem = true sau aplicați o rotație nodului rădăcină după încărcare.


Întrebări frecvente

Conversia păstrează animațiile?

Datele de animație sunt păstrate la conversia între formatele care le suportă (de exemplu, COLLADA → glTF). STL și OBJ nu conțin date de animație. FBX nu este suportat prin scene.open()/scene.save(), astfel încât rotunjirile de animație FBX nu sunt disponibile prin API-ul de nivel înalt.

Este păstrat datele de textură?

Texturile la care se face referire în materialele OBJ sau încorporate în glTF sunt transmise graficii scenei. Când se salvează în GLB (binaryMode = true), bufferul binar este încorporat într-un singur fișier. Pentru ieșirea OBJ, texturile sunt salvate ca fișiere separate alături de .obj.

Pot să convertesc multe fișiere în paralel?

scene.open() și scene.save() sunt sincrone. Folosiți Node.js worker_threads pentru procesare paralelă.


Vezi și

 Română