Hvordan konvertere 3D-modeller i TypeScript

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

Steg 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 .fbx skriver 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 til scene.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 \ TilglTF/GLBOBJSTLFBX3MFCOLLADA
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.


Se også

 Norsk