Cómo guardar modelos 3D en TypeScript
Aspose.3D FOSS para TypeScript guarda escenas en todos los formatos compatibles con una sola scene.save() llamada. El formato de salida se detecta automáticamente a partir de la extensión del archivo. Esta guía cubre cómo guardar en cada formato y usar opciones específicas de cada formato.
Guía paso a paso
Paso 1: Instalar @aspose/3d
npm install @aspose/3dPaso 2: Cargar o Construir una Escena
Cargue un archivo existente o construya una escena programáticamente antes de guardarla.
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();Paso 3: Guardar con Formato Detectado Automáticamente
scene.save(path) detecta el formato de salida a partir de la extensión del archivo:
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');Paso 4: Usar SaveOptions Específicos del Formato
Para un control más detallado, pase un objeto de opciones específico del 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);Paso 5: Guardar en un Buffer (En Memoria)
Usar scene.saveToBuffer() para obtener la salida como un Buffer sin escribir en 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.
Paso 6: Verificar la Salida
Después de guardar, verifique que el archivo exista y tenga un tamaño distinto de cero:
import * as fs from 'fs';
const stats = fs.statSync('output.glb');
console.log(`Saved output.glb: ${stats.size} bytes`);Matriz de Compatibilidad de Formatos
| Extensión | Formato | Notas |
|---|---|---|
.glb | glTF 2.0 Binary | Recomendado para glTF; todos los recursos incrustados en un solo archivo |
.gltf | glTF 2.0 JSON | Separado .bin y archivos de textura junto al JSON |
.obj | Wavefront OBJ | Escribe .mtl archivo de material junto a .obj cuando hay materiales |
.stl | STL | Predeterminado: STL binario; usar StlSaveOptions.ascii = true para texto |
.fbx | Autodesk FBX | Formato FBX binario |
.3mf | 3D Manufacturing | Adecuado para flujos de trabajo de impresión 3D |
.dae | COLLADA | Formato de intercambio basado en XML |
Problemas comunes y soluciones
Error: Unsupported format al guardar
Verifique que la extensión del archivo coincida con un formato compatible. La biblioteca usa la extensión para detectar el formato; un archivo llamado output.xyz fallará.
.obj el archivo se guarda pero faltan los materiales
Al guardar OBJ, la biblioteca de materiales (.mtl) se escribe automáticamente junto al .obj. Ambos archivos deben estar en el mismo directorio al volver a abrir. Si solo necesita geometría, establezca ObjSaveOptions.enableMaterials = false.
Grande .gltf con texturas separadas
Usa .glb en lugar de .gltf; agrupa datos binarios en un único archivo autónomo. Establece GltfSaveOptions.binaryMode = true al pasar un GltfSaveOptions instancia.
Preguntas frecuentes
¿Puedo guardar en varios formatos en una sola ejecución?
Sí; llama scene.save() varias veces con rutas diferentes:
scene.save('output.glb');
scene.save('output.stl');
scene.save('output.obj');¿Guardar modifica la escena?
No. scene.save() es una operación de solo lectura en el grafo de escena. Puedes guardar la misma escena en varios formatos sin efectos secundarios.
¿Puedo sobrescribir el archivo fuente?
Sí. Pasa la misma ruta a scene.save() que usaste en scene.open(). La biblioteca escribe en un búfer y luego escribe en el disco.