Como Converter Modelos 3D em TypeScript

Como Converter Modelos 3D em TypeScript

Aspose.3D FOSS for TypeScript converte entre formatos 3D carregando em uma representação neutra Scene e salvando no formato de destino. Este guia mostra as conversões mais comuns.

Guia passo a passo

Etapa 1: Instalar @aspose/3d

npm install @aspose/3d

Etapa 2: Carregar o arquivo de origem

Crie um Scene e chame scene.open(). Use a classe *LoadOptions específica do formato para obter os melhores resultados.

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);

Etapa 3: Salvar no Formato de Destino

Chame scene.save() com o caminho de saída. O formato de saída é detectado a partir da extensão do arquivo.

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

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

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

Nota: FBX não é suportado pela detecção automática scene.save(). A extensão .fbx não está vinculada a nenhum exportador — salvar para .fbx grava silenciosamente conteúdo no formato OBJ. Use OBJ, glTF, STL, 3MF ou COLLADA para uma saída confiável.


Etapa 4: Exemplos de Conversão Comuns

OBJ para 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 — Não suportado

A detecção automática de FBX não está integrada em scene.open(). Um arquivo .fbx passado para scene.open() não é reconhecido por nenhum detector de formato e acaba sendo encaminhado ao analisador STL, que falhará ou produzirá lixo. As classes de importação/exportação de FBX existem na biblioteca, mas exigem invocação direta em vez da API de alto nível open()/save(). Use COLLADA, OBJ ou glTF como alternativa ao FBX.

glTF para STL

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

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

COLLADA para 3MF

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

const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');

Etapa 5: Conversão em lote de vários arquivos

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}`);
}

Matriz de Conversão Suportada

De \ ParaglTF/GLBOBJSTLFBX3MFCOLLADA
OBJ
glTF/GLB
FBX
STL
3MF
COLLADA

FBX não é suportado via a API de alto nível open()/save() — o formato não está integrado à detecção automática. Todas as células FBX acima são ✗.


Problemas Comuns e Soluções

Materiais são perdidos após a conversão

Materiais OBJ (usemtl, .mtl arquivo) são carregados quando ObjLoadOptions.enableMaterials = true. Ao salvar para glTF, as propriedades de material PBR são mapeadas automaticamente. Materiais complexos (procedurais, multi‑camada) podem ser convertidos com fidelidade reduzida.

A malha aparece dimensionada incorretamente

Formatos diferentes usam unidades padrão diferentes (milímetros para STL, metros para glTF). Use ObjLoadOptions.scale ao carregar ou StlSaveOptions.scaleFactor ao salvar para normalizar as unidades.

Incompatibilidade de sistema de coordenadas (modelo invertido ou rotacionado)

Alguns formatos usam Y‑up à direita, outros Z‑up. Use ObjLoadOptions.flipCoordinateSystem = true ou aplique uma rotação ao nó raiz após o carregamento.


Perguntas Frequentes

A conversão preserva animações?

Os dados de animação são preservados ao converter entre formatos que os suportam (por exemplo, COLLADA → glTF). STL e OBJ não carregam dados de animação. FBX não é suportado via scene.open()/scene.save(), portanto as conversões de ida e volta de animação FBX não estão disponíveis através da API de alto nível.

Os dados de textura são preservados?

Texturas referenciadas por materiais OBJ ou incorporadas no glTF são mantidas no grafo de cena. Ao salvar para GLB (binaryMode = true), o buffer binário é incorporado em um único arquivo. Para saída OBJ, as texturas são salvas como arquivos separados ao lado do .obj.

Posso converter vários arquivos em paralelo?

scene.open() e scene.save() são síncronos. Use Node.js worker_threads para processamento paralelo.


Veja Também

 Português