Com convertir models 3D a TypeScript

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

Pas 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ó .fbx no està connectada a cap exportador — desar a .fbx escriu 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 .fbx passat a scene.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 nivell open()/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 \ AglTF/GLBOBJSTLFBX3MFCOLLADA
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.


Vegeu també

 Català