3D modellek konvertálása TypeScriptben

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/3d

2. 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 .fbx kiterjesztés nincs összekötve semmilyen exportálóval — a .fbx menté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 .fbx fájl, amelyet a scene.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élglTF/GLBOBJSTLFBX3MFCOLLADA
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.


Lásd még

 Magyar