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/3dSteg 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.fbxskriver 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 tillscene.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:etopen()/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 \ Till | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| 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.