Com convertir models 3D a TypeScript
Aspose.3D FOSS for TypeScript converteix entre formats 3D carregant en una representació neutral Scene i desant al format de destinació. Aquesta guia mostra les conversions més comunes.
Guia pas a pas
Pas 1: Instal·la @aspose/3d
npm install @aspose/3dPas 2: Carrega el fitxer d’origen
Creeu un Scene i invoqueu scene.open(). Utilitzeu la classe *LoadOptions específica del format per obtenir els millors resultats.
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);Pas 3: Desa al format de destinació
Crida scene.save() amb el camí de sortida. El format de sortida es detecta a partir de l’extensió del fitxer.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Nota: FBX no és compatible amb la detecció automàtica
scene.save(). L’extensió.fbxno està connectada a cap exportador — desar a.fbxescriu silenciosament contingut en format OBJ. Utilitzeu OBJ, glTF, STL, 3MF o COLLADA per a una sortida fiable.
Pas 4: Exemples de conversió comuns
OBJ a 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 — No compatible
La detecció automàtica de FBX no està integrada a
scene.open(). Un fitxer.fbxpassat ascene.open()no és reconegut per cap detector de format i cau al parser STL, que fallarà o produirà dades incorrectes. Les classes d’importació/exportació FBX existeixen a la biblioteca però requereixen una invocació directa en lloc de l’API d’alt nivellopen()/save(). Utilitzeu COLLADA, OBJ o glTF com a alternativa a FBX.
glTF a STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA a 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Pas 5: Conversió per lots de diversos fitxers
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}`);
}Matriu de conversió compatible
| De \ A | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX no és compatible a través de l’API de nivell alt open()/save() — el format no està connectat a la detecció automàtica. Totes les cel·les FBX anteriors són ✗.
Problemes comuns i solucions
Els materials es perden després de la conversió
Els materials OBJ (fitxer usemtl, .mtl) es carreguen quan ObjLoadOptions.enableMaterials = true. En desar a glTF, les propietats de material PBR es mapen automàticament. Els materials complexos (procedurals, multi‑capa) poden convertir‑se amb una fidelitat reduïda.
Malla apareix escalada incorrectament
Els diferents formats utilitzen unitats predeterminades diferents (mil·límetres per a STL, metres per a glTF). Utilitzeu ObjLoadOptions.scale en carregar o StlSaveOptions.scaleFactor en desar per normalitzar les unitats.
Desajust del sistema de coordenades (model capgirat o girat)
Alguns formats utilitzen Y-up a la mà dreta, altres Z-up. Utilitzeu ObjLoadOptions.flipCoordinateSystem = true o apliqueu una rotació al node arrel després de carregar.
Preguntes freqüents
La conversió conserva les animacions?
Les dades d’animació es conserven en convertir entre formats que les admeten (p. ex., COLLADA → glTF). STL i OBJ no transporten dades d’animació. FBX no és compatible via scene.open()/scene.save(), de manera que les conversions d’animació FBX no estan disponibles a través de l’API d’alt nivell.
Es conserva la informació de textura?
Les textures referenciades pels materials OBJ o incrustades al glTF es transmeten al gràfic de l’escena. En desar a GLB (binaryMode = true), el buffer binari s’incrusta en un únic fitxer. Per a la sortida OBJ, les textures es desen com a fitxers separats al costat del .obj.
Puc convertir molts fitxers en paral·lel?
scene.open() i scene.save() són sincrònics. Utilitzeu Node.js worker_threads per al processament paral·lel.