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/3dEtapa 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.fbxnão está vinculada a nenhum exportador — salvar para.fbxgrava 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.fbxpassado parascene.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ívelopen()/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 \ Para | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| 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.