Hvordan konvertere 3D-modeller i TypeScript
Aspose.3D FOSS for TypeScript konverterer mellom 3D-formater ved å laste inn i en nøytral Scene-representasjon og lagre til målformatet. Denne guiden viser de mest vanlige konverteringene.
Steg-for-steg guide
Steg 1: Installer @aspose/3d
npm install @aspose/3dSteg 2: Last inn kildefilen
Opprett en Scene og kall scene.open(). Bruk den formatspesifikke *LoadOptions-klassen for best resultat.
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);Steg 3: Lagre til målformatet
Kall scene.save() med utdata‑stien. Utdataformatet oppdages fra filendelsen.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Merk: FBX er ikke støttet av
scene.save()automatisk gjenkjenning..fbx-utvidelsen er ikke koblet til noen eksportør — lagring til.fbxskriver stille innhold i OBJ-format i stedet. Bruk OBJ, glTF, STL, 3MF eller COLLADA for pålitelig utdata.
Trinn 4: Vanlige konverteringseksempler
OBJ til 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 — Ikke støttet
FBX-autooppdagelse er ikke koblet inn i
scene.open(). En.fbx-fil som sendes tilscene.open()blir ikke gjenkjent av noen formatdetektor og faller gjennom til STL‑parseren, som vil mislykkes eller produsere søppel. FBX‑importør/‑eksportør‑klasser finnes i biblioteket, men krever direkte påkalling i stedet for det høy‑nivåopen()/save()‑API‑et. Bruk COLLADA, OBJ eller glTF som et FBX‑alternativ.
glTF til STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA til 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Steg 5: Batchkonverter flere filer
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}`);
}Støttet konverteringsmatrise
| Fra \ Til | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX er ikke støttet via det høynivå open()/save() API — formatet er ikke koblet til automatisk gjenkjenning. Alle FBX-celler over er ✗.
Vanlige problemer og løsninger
Materialer går tapt etter konvertering
OBJ-materialer (usemtl, .mtl fil) lastes når ObjLoadOptions.enableMaterials = true. Når du lagrer til glTF, blir PBR-materialegenskaper automatisk kartlagt. Komplekse materialer (prosedyrebaserte, flerlags) kan konverteres med redusert nøyaktighet.
Mesh vises i feil skala
Ulike formater bruker forskjellige standardenheter (millimeter for STL, meter for glTF). Bruk ObjLoadOptions.scale når du laster inn eller StlSaveOptions.scaleFactor når du lagrer for å normalisere enheter.
Koordinatsystem mismatch (modell vendt eller rotert)
Noen formater bruker høyrehånds Y‑opp, andre Z‑opp. Bruk ObjLoadOptions.flipCoordinateSystem = true eller anvend en rotasjon på rotnoden etter lasting.
Ofte stilte spørsmål
Bevarer konvertering animasjoner?
Animasjonsdata bevares når du konverterer mellom formater som støtter det (f.eks. COLLADA → glTF). STL og OBJ inneholder ikke animasjonsdata. FBX støttes ikke via scene.open()/scene.save(), så FBX‑animasjonsrundreiser er ikke tilgjengelige gjennom høynivå‑API‑et.
Er teksturdata bevart?
Teksturer referert av OBJ-materialer eller innebygd i glTF blir overført til scenegrafen. Når du lagrer til GLB (binaryMode = true), er den binære bufferen innebygd i en enkelt fil. For OBJ-utdata lagres teksturer som separate filer ved siden av .obj.
Kan jeg konvertere mange filer parallelt?
scene.open() og scene.save() er synkrone. Bruk Node.js worker_threads for parallell behandling.