Como salvar modelos 3D em TypeScript.
Aspose.3D FOSS para TypeScript salva cenas em todos os formatos suportados com uma única scene.save() chamada. O formato de saída é detectado automaticamente a partir da extensão do arquivo. Este guia cobre como salvar em cada formato e usar opções específicas de formato.
Guia passo a passo
Etapa 1: Instale @aspose/3d
npm install @aspose/3dEtapa 2: Carregar ou Construir uma Cena
Carregue um arquivo existente ou construa uma cena programaticamente antes de salvar.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
// Load from file
const scene = new Scene();
scene.open('source.obj', new ObjLoadOptions());
// Or create a new empty scene
const emptyScene = new Scene();Etapa 3: Salvar com Formato Detectado Automaticamente
scene.save(path) detecta o formato de saída a partir da extensão do arquivo:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('input.obj', new ObjLoadOptions());
// Save as binary glTF
scene.save('output.glb');
// Save as JSON glTF
scene.save('output.gltf');
// Save as STL
scene.save('output.stl');
// Save as OBJ
scene.save('output.obj');
// Save as FBX
scene.save('output.fbx');
// Save as 3MF
scene.save('output.3mf');
// Save as COLLADA
scene.save('output.dae');Etapa 4: Usar SaveOptions Específicos de Formato
Para controle detalhado, passe um objeto de opções específico do formato:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
// Export to GLB with specific options
const saveOptions = new GltfSaveOptions();
saveOptions.binaryMode = true; // produce GLB (binary glTF)
scene.save('output.glb', saveOptions);Etapa 5: Salvar em um Buffer (Na Memória)
Use scene.saveToBuffer() para obter a saída como um Buffer sem gravar no disco:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
const buffer = scene.saveToBuffer('output.glb');
console.log(`Buffer size: ${buffer.length} bytes`);
// Send via HTTP, upload to S3, etc.
Etapa 6: Verificar a Saída
Após salvar, verifique se o arquivo existe e tem tamanho diferente de zero:
import * as fs from 'fs';
const stats = fs.statSync('output.glb');
console.log(`Saved output.glb: ${stats.size} bytes`);Matriz de Suporte a Formatos
| Extensão | Formato | Observações |
|---|---|---|
.glb | glTF 2.0 Binário | Recomendado para glTF; todos os ativos incorporados em um único arquivo |
.gltf | JSON do glTF 2.0 | Separado .bin e arquivos de textura ao lado do JSON |
.obj | Wavefront OBJ | Escreve .mtl arquivo de material ao lado .obj quando há materiais |
.stl | STL | Padrão: STL binário; use StlSaveOptions.ascii = true para texto |
.fbx | Autodesk FBX | Formato FBX binário |
.3mf | 3D Manufacturing | Adequado para fluxos de trabalho de impressão 3D |
.dae | COLLADA | Formato de intercâmbio baseado em XML |
Problemas comuns e correções
Error: Unsupported format ao salvar
Verifique se a extensão do arquivo corresponde a um formato suportado. A biblioteca usa a extensão para detectar o formato; um arquivo chamado output.xyz falhará.
.obj arquivo salva mas os materiais estão ausentes
Ao salvar OBJ, a biblioteca de materiais (.mtl) é escrita automaticamente ao lado do .obj. Ambos os arquivos devem estar no mesmo diretório ao reabrir. Se você precisar apenas da geometria, defina ObjSaveOptions.enableMaterials = false.
Grande .gltf com texturas separadas
Use .glb em vez de .gltf; ele agrupa dados binários em um único arquivo autônomo. Defina GltfSaveOptions.binaryMode = true ao passar um GltfSaveOptions instância.
Perguntas Frequentes
Posso salvar em vários formatos em uma única execução?
Sim; chame scene.save() várias vezes com caminhos diferentes:
scene.save('output.glb');
scene.save('output.stl');
scene.save('output.obj');Salvar modifica a cena?
Não. scene.save() é uma operação somente leitura no grafo de cena. Você pode salvar a mesma cena em vários formatos sem quaisquer efeitos colaterais.
Posso sobrescrever o arquivo de origem?
Sim. Passe o mesmo caminho para scene.save() que você usou em scene.open(). A biblioteca grava em um buffer e depois grava no disco.