Ako konvertovať 3D modely v TypeScript
Aspose.3D FOSS for TypeScript konvertuje medzi 3D formátmi načítaním do neutrálnej Scene reprezentácie a uložením do cieľového formátu. Tento sprievodca ukazuje najčastejšie konverzie.
Krok za krokom sprievodca
Krok 1: Nainštalujte @aspose/3d
npm install @aspose/3dKrok 2: Načítajte zdrojový súbor
Vytvorte Scene a zavolajte scene.open(). Použite špecifickú pre formát triedu *LoadOptions pre najlepšie výsledky.
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);Krok 3: Uložiť do cieľového formátu
Zavolajte scene.save() s výstupnou cestou. Formát výstupu sa určuje podľa prípony súboru.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Poznámka: FBX nie je podporovaný automatickým rozpoznávaním
scene.save(). Rozšírenie.fbxnie je prepojené s žiadnym exportérom — ukladanie do.fbxticho zapisuje obsah vo formáte OBJ. Použite OBJ, glTF, STL, 3MF alebo COLLADA pre spoľahlivý výstup.
Krok 4: Bežné príklady konverzie
OBJ do 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 — Nie je podporované
FBX automatické rozpoznávanie nie je zapojené v
scene.open(). Súbor.fbxodovzdaný doscene.open()nie je rozpoznaný žiadnym detektorom formátu a prejde na parser STL, ktorý zlyhá alebo vytvorí nečitateľný výstup. Triedy importéra/exportéra FBX existujú v knižnici, ale vyžadujú priame volanie namiesto vysokoúrovňového APIopen()/save(). Použite COLLADA, OBJ alebo glTF ako alternatívu k FBX.
glTF do STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA do 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Krok 5: Hromadná konverzia viacerých súborov
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}`);
}Podporovaná konverzná matica
| Z \ Do | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX nie je podporovaný prostredníctvom vysokej úrovne open()/save() API — formát nie je zapojený do automatického rozpoznávania. Všetky vyššie uvedené FBX bunky sú ✗.
Bežné problémy a riešenia
Materiály sa stratia po konverzii
Materiály OBJ (usemtl, .mtl súbor) sa načítajú, keď ObjLoadOptions.enableMaterials = true. Pri ukladaní do glTF sa vlastnosti materiálu PBR automaticky mapujú. Zložité materiály (procedurálne, viacvrstvové) sa môžu konvertovať so zníženou vernosťou.
Sieť je nesprávne škálovaná
Rôzne formáty používajú rôzne predvolené jednotky (milimetre pre STL, metre pre glTF). Použite ObjLoadOptions.scale pri načítaní alebo StlSaveOptions.scaleFactor pri ukladaní na normalizáciu jednotiek.
Nesúlad súradnicového systému (model prevrátený alebo otočený)
Niektoré formáty používajú pravý Y-up, iné Z-up. Použite ObjLoadOptions.flipCoordinateSystem = true alebo aplikujte rotáciu na koreňový uzol po načítaní.
Často kladené otázky
Zachová konverzia animácie?
Animácie sa zachovávajú pri konverzii medzi formátmi, ktoré ich podporujú (napr. COLLADA → glTF). STL a OBJ neobsahujú údaje o animácii. FBX nie je podporovaný prostredníctvom scene.open()/scene.save(), takže FBX animácie round-trips nie sú k dispozícii prostredníctvom high-level API.
Sú textúrové dáta zachované?
Textúry odkazované materiálmi OBJ alebo vložené v glTF sa prenášajú do grafu scény. Pri ukladaní do GLB (binaryMode = true) je binárny buffer vložený do jedného súboru. Pre výstup OBJ sa textúry ukladajú ako samostatné súbory vedľa .obj.
Môžem konvertovať viacero súborov paralelne?
scene.open() a scene.save() sú synchronné. Použite Node.js worker_threads na paralelné spracovanie.