Hur man konverterar 3D-modeller i TypeScript

Hur man konverterar 3D-modeller i TypeScript

Aspose.3D FOSS för TypeScript konverterar mellan 3D-format genom att läsa in till en neutral Scene-representation och spara till målformatet. Den här guiden visar de vanligaste konverteringarna.

Steg-för-steg-guide

Steg 1: Installera @aspose/3d

npm install @aspose/3d

Steg 2: Läs in källfilen

Skapa en Scene och anropa scene.open(). Använd den formatspecifika *LoadOptions-klassen för bästa 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: Spara till målformatet

Anropa scene.save() med utdatasökvägen. Utdataformatet identifieras från filtillägget.

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

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

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

Obs: FBX stöds inte av scene.save() automatisk identifiering. Tillägget .fbx är inte kopplat till någon exportör — att spara till .fbx skriver i stället OBJ-formatinnehåll utan varning. Använd OBJ, glTF, STL, 3MF eller COLLADA för tillförlitlig utdata.


Steg 4: Vanliga konverteringsexempel

OBJ till 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 — Stöds inte

FBX-automatisk identifiering är inte inbyggd i scene.open(). En .fbx-fil som skickas till scene.open() känns inte igen av någon formatdetektor och faller igenom till STL-parsern, som misslyckas eller producerar felaktiga data. FBX-importer/exporterklasser finns i biblioteket men kräver direkt anrop i stället för det högnivå-API:et open()/save(). Använd COLLADA, OBJ eller glTF som FBX-alternativ.

glTF till STL

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

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

COLLADA till 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: Batchkonvertera flera 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}`);
}

Konverteringsmatris som stöds

Från \ TillglTF/GLBOBJSTLFBX3MFCOLLADA
OBJ
glTF/GLB
FBX
STL
3MF
COLLADA

FBX stöds inte via högnivå-API:et open()/save() — formatet är inte inbyggt i automatisk identifiering. Alla FBX-celler ovan är ✗.


Vanliga problem och lösningar

Material går förlorade efter konvertering

OBJ-material (usemtl, .mtl-fil) läses in när ObjLoadOptions.enableMaterials = true. När du sparar till glTF mappas PBR-materialegenskaper automatiskt. Komplexa material (procedurella, flerlagers) kan konverteras med reducerad återgivningskvalitet.

Mesh visas felaktigt skalad

Olika format använder olika standardenheter (millimeter för STL, meter för glTF). Använd ObjLoadOptions.scale vid inläsning eller StlSaveOptions.scale vid sparande för att normalisera enheter.

Koordinatsystemmatchningsfel (modellen är spegelvänd eller roterad)

Vissa format använder högerhänt Y-upp, andra Z-upp. Använd ObjLoadOptions.flipCoordinateSystem = true eller applicera en rotation på rotnoden efter inläsning.


Vanliga frågor

Bevaras animationer vid konvertering?

Animationsdata bevaras vid konvertering mellan format som stöder det (t.ex. COLLADA → glTF). STL och OBJ innehåller ingen animationsdata. FBX stöds inte via scene.open()/scene.save(), så FBX-animationsrundturer är inte tillgängliga via högnivå-API:et.

Bevaras textурdata?

Texturer som refereras av OBJ-material eller är inbäddade i glTF förs vidare till scenegrafen. När du sparar till GLB (binaryMode = true) bäddas den binära bufferten in i en enda fil. För OBJ-utdata sparas texturer som separata filer bredvid .obj.

Kan jag konvertera många filer parallellt?

scene.open() och scene.save() är synkrona. Använd Node.js worker_threads för parallell bearbetning.


Se även

 Svenska