3D modellek konvertálása TypeScriptben
Az Aspose.3D FOSS for TypeScript 3D formátumok között konvertál, egy semleges Scene reprezentációba betöltve, majd a célformátumba mentve. Ez az útmutató a leggyakoribb konverziókat mutatja be.
Lépésről‑lépésre útmutató
1. lépés: Telepítse az @aspose/3d
npm install @aspose/3d2. lépés: Töltse be a forrásfájlt
Hozzon létre egy Scene-t és hívja meg a scene.open()-t. A formátum‑specifikus *LoadOptions osztály használata a legjobb eredményt biztosítja.
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);3. lépés: Mentés a célformátumba
Hívja meg a scene.save()-t a kimeneti úttal. A kimeneti formátum a fájlkiterjesztésből kerül meghatározásra.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Megjegyzés: FBX nem támogatott a
scene.save()automatikus felismerés által. A.fbxkiterjesztés nincs összekötve semmilyen exportálóval — a.fbxmentése csendben OBJ-formátumú tartalmat ír. Használjon OBJ, glTF, STL, 3MF vagy COLLADA formátumot a megbízható kimenethez.
4. lépés: Gyakori konverziós példák
OBJ → 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 — Nem támogatott
Az FBX automatikus felismerése nincs beépítve a
scene.open()-ba. Egy.fbxfájl, amelyet ascene.open()-nek adunk, nem kerül felismerésre semmilyen formátumdetektor által, és átkerül az STL-elemzőhöz, amely hibát okoz vagy szemét adatot eredményez. FBX importáló/exportáló osztályok léteznek a könyvtárban, de közvetlen meghívást igényelnek a magas szintűopen()/save()API helyett. Használjon COLLADA, OBJ vagy glTF formátumot FBX alternatívaként.
glTF‑ból STL‑be
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA → 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');5. lépés: Tömeges konvertálás több fájlra
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}`);
}Támogatott konverziós mátrix
| Forrás \ Cél | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX nem támogatott a magas szintű open()/save() API-n keresztül — a formátum nincs beágyazva az automatikus felismerésbe. Az összes fenti FBX cella ✗.
Gyakori problémák és megoldások
Az anyagok elvesznek a konverzió után
OBJ anyagok (usemtl, .mtl fájl) betöltődnek, amikor ObjLoadOptions.enableMaterials = true. A glTF formátumba mentéskor a PBR anyagtulajdonságok automatikusan leképeződnek. A komplex anyagok (procedurális, több rétegű) csökkent hűséggel konvertálódhatnak.
A háló méretezése helytelenül jelenik meg
A különböző formátumok eltérő alapértelmezett egységeket használnak (STL esetén milliméter, glTF esetén méter). Használja a ObjLoadOptions.scale‑t betöltéskor, vagy a StlSaveOptions.scaleFactor‑t mentéskor az egységek normalizálásához.
Koordináta-rendszer eltérés (modell tükrözve vagy elforgatva)
Néhány formátum jobbkezes Y-felfelé rendszert használ, mások Z-felfelé. Használja a ObjLoadOptions.flipCoordinateSystem = true-t, vagy alkalmazzon egy forgatást a gyökércsomóponton a betöltés után.
Gyakran Ismételt Kérdések
Megőrzi a konverzió az animációkat?
Az animációs adatok megmaradnak, amikor olyan formátumok között konvertálunk, amelyek támogatják (pl. COLLADA → glTF). Az STL és OBJ nem tartalmaznak animációs adatokat. Az FBX nem támogatott a scene.open()/scene.save() segítségével, ezért az FBX animációk körkörös átalakítása nem érhető el a magas szintű API-n keresztül.
Megmaradnak a textúra adatok?
Az OBJ anyagok által hivatkozott vagy a glTF-ben beágyazott textúrák átkerülnek a jelenet gráfba. GLB formátumba mentéskor (binaryMode = true) a bináris puffer egyetlen fájlba van beágyazva. OBJ kimenet esetén a textúrák külön fájlokként kerülnek mentésre a .obj mellett.
Több fájlt konvertálhatok párhuzamosan?
scene.open() és scene.save() szinkron. Használja a Node.js worker_threads párhuzamos feldolgozáshoz.