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/3d2. 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..fbxpaplaš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()..fbxfails, kas nodotsscene.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ņaopen()/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 \ Uz | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| 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.