Kā konvertēt 3D modeļus TypeScript valodā

Kā konvertēt 3D modeļus TypeScript valodā

Aspose.3D FOSS for TypeScript pārvērš starp 3D formātiem, ielādējot neitrālā Scene pārstāvībā un saglabājot mērķa formātā. Šis ceļvedis parāda visbiežāk sastopamās konversijas.

Rokasgrāmata soli pa solim

1. solis: Instalējiet @aspose/3d

npm install @aspose/3d

2. solis: ielādēt avota failu

Izveidojiet Scene un izsauciet scene.open(). Izmantojiet formāta specifisko *LoadOptions klasi, lai iegūtu vislabākos rezultātus.

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. solis: Saglabāt mērķa formātā

Izsauciet scene.save() ar izvades ceļu. Izvades formāts tiek noteikts no faila paplašinājuma.

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

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

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

Piezīme: FBX nav atbalstīts ar scene.save() automātisko noteikšanu. .fbx paplašinājums nav piesaistīts nevienam eksportētājam — saglabājot uz .fbx, klusi tiek rakstīts OBJ‑formāta saturs. Izmantojiet OBJ, glTF, STL, 3MF vai COLLADA, lai iegūtu uzticamu izvadi.


Solis 4: Bieži konvertēšanas piemēri

OBJ uz 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 — Nav atbalstīts

FBX automātiskā noteikšana nav integrēta scene.open(). .fbx fails, kas nodots scene.open(), netiek atpazīts neviens formāta detektors un tiek nodots STL parsētājam, kas neizdosies vai radīs atkritumus. FBX importētāja/eksportētāja klases bibliotēkā eksistē, bet tās prasa tiešu izsaukumu, nevis augsta līmeņa open()/save() API. Izmantojiet COLLADA, OBJ vai glTF kā FBX alternatīvu.

glTF uz STL

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

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

COLLADA uz 3MF

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

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

5. solis: Masveida konvertēšana vairākos failos

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

Atbalstītā konvertēšanas matrica

No \ UzglTF/GLBOBJSTLFBX3MFCOLLADA
OBJ
glTF/GLB
FBX
STL
3MF
COLLADA

FBX nav atbalstīts caur augsta līmeņa open()/save() API — formāts nav integrēts automātiskajā noteikšanā. Visas FBX šūnas iepriekš ir ✗.


Biežas problēmas un risinājumi

Materiāli tiek zaudēti pēc konvertēšanas

OBJ materiāli (usemtl, .mtl fails) tiek ielādēti, kad ObjLoadOptions.enableMaterials = true. Saglabājot uz glTF, PBR materiālu īpašības tiek automātiski kartētas. Sarežģīti materiāli (procedurāli, daudzslāņaini) var tikt konvertēti ar samazinātu precizitāti.

Tīkls tiek parādīts nepareizi mērogots

Dažādi formāti izmanto dažādas noklusējuma mērvienības (milimetri STL, metri glTF). Izmantojiet ObjLoadOptions.scale, kad ielādējat, vai StlSaveOptions.scaleFactor, kad saglabājat, lai normalizētu mērvienības.

Koordinātu sistēmas neatbilstība (modelis apgriezts vai pagriezts)

Daži formāti izmanto labās rokas Y‑up, citi Z‑up. Izmantojiet ObjLoadOptions.flipCoordinateSystem = true vai piemērojiet rotāciju saknes mezglam pēc ielādes.


Biežāk uzdotie jautājumi

Vai konvertēšana saglabā animācijas?

Animācijas dati tiek saglabāti, pārvēršot starp formātiem, kas tos atbalsta (piemēram, COLLADA → glTF). STL un OBJ nesatur animācijas datus. FBX netiek atbalstīts caur scene.open()/scene.save(), tāpēc FBX animācijas apgrieztā pārvēršana nav pieejama caur augsta līmeņa API.

Vai tekstūras dati tiek saglabāti?

Tekstūras, uz kurām atsaucas OBJ materiāli vai kas ir iekļautas glTF, tiek pārnestas uz ainas grafu. Kad tiek saglabāts kā GLB (binaryMode = true), binārais buferis tiek iekļauts vienā failā. OBJ izvades gadījumā tekstūras tiek saglabātas kā atsevišķi faili blakus .obj.

Vai varu pārveidot daudz failus paralēli?

scene.open() un scene.save() ir sinhroni. Izmantojiet Node.js worker_threads paralēlai apstrādei.


Skatīt arī

 Latviešu