Kako pretvoriti 3D modele u TypeScriptu

Kako pretvoriti 3D modele u TypeScriptu

Aspose.3D FOSS for TypeScript pretvara između 3D formata učitavanjem u neutralnu Scene reprezentaciju i spremanjem u odabrani format. Ovaj vodič prikazuje najčešće konverzije.

Vodič korak po korak

Korak 1: Instalirajte @aspose/3d

npm install @aspose/3d

Korak 2: Učitaj izvornu datoteku

Stvorite Scene i pozovite scene.open(). Koristite format‑specifičnu klasu *LoadOptions za najbolje 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);

Korak 3: Spremi u odredišni format

Pozovite scene.save() s putanjom izlaza. Format izlaza se otkriva iz ekstenzije datoteke.

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

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

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

Napomena: FBX nije podržan od strane scene.save() automatskog otkrivanja. Proširenje .fbx nije povezano s nijednim izvoznikom — spremanje u .fbx tiho zapisuje sadržaj u OBJ-formatu. Koristite OBJ, glTF, STL, 3MF ili COLLADA za pouzdan izlaz.


Korak 4: Uobičajeni primjeri konverzije

OBJ u 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 — Nije podržano

FBX automatsko otkrivanje nije implementirano u scene.open(). Datoteka .fbx proslijeđena u scene.open() ne prepoznaje se od strane nijednog detektora formata i pada na STL parser, koji će propasti ili proizvesti smeće. FBX klase za uvoz/izvoz postoje u biblioteci, ali zahtijevaju izravno pozivanje umjesto visokorazinske open()/save() API. Koristite COLLADA, OBJ ili glTF kao FBX alternativu.

glTF u STL

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

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

COLLADA u 3MF

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

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

Korak 5: Skupno pretvaranje više datoteka

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

Podržana matrica konverzije

Od \ DoglTF/GLBOBJSTLFBX3MFCOLLADA
OBJ
glTF/GLB
FBX
STL
3MF
COLLADA

FBX nije podržan putem visokog nivoa open()/save() API‑ja — format nije povezan s automatskim otkrivanjem. Svi FBX ćelije iznad su ✗.


Uobičajeni problemi i rješenja

Materijali se gube nakon konverzije

OBJ materijali (usemtl, .mtl datoteka) učitavaju se kada ObjLoadOptions.enableMaterials = true. Prilikom spremanja u glTF, PBR svojstva materijala automatski se mapiraju. Kompleksni materijali (proceduralni, višeslojni) mogu se konvertirati s smanjenom vjernosti.

Mreža se prikazuje pogrešno skalirana

Različiti formati koriste različite zadane jedinice (milimetri za STL, metri za glTF). Koristite ObjLoadOptions.scale pri učitavanju ili StlSaveOptions.scaleFactor pri spremanju za normalizaciju jedinica.

Neusklađenost koordinatnog sustava (model preokrenut ili rotiran)

Neki formati koriste desni Y‑gore, drugi Z‑gore. Koristite ObjLoadOptions.flipCoordinateSystem = true ili primijenite rotaciju na korijenski čvor nakon učitavanja.


Često postavljana pitanja

Preservira li konverzija animacije?

Podaci o animaciji se čuvaju pri konverziji između formata koji ih podržavaju (npr., COLLADA → glTF). STL i OBJ ne nose podatke o animaciji. FBX nije podržan putem scene.open()/scene.save(), pa FBX animacije ne mogu biti zaokružene kroz visokorazinski API.

Je li teksturni podaci sačuvani?

Teksture na koje se referira OBJ materijalima ili su ugrađene u glTF prenose u graf scenske strukture. Kada se sprema u GLB (binaryMode = true), binarni međuspremnik je ugrađen u jednu datoteku. Za OBJ izlaz, teksture se spremaju kao zasebne datoteke uz .obj.

Mogu li konvertirati više datoteka paralelno?

scene.open() i scene.save() su sinkroni. Koristite Node.js worker_threads za paralelno procesiranje.


Vidi također

 Hrvatski