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/3dPasul 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.fbxnu este conectată la niciun exportator — salvarea în.fbxscrie î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.fbxtransmis cătrescene.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 înaltopen()/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ătre | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| 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ă.