Cómo convertir modelos 3D en TypeScript
Aspose.3D FOSS for TypeScript convierte entre formatos 3D cargando en una representación neutral Scene y guardando en el formato de destino. Esta guía muestra las conversiones más comunes.
Guía paso a paso
Paso 1: Instalar @aspose/3d
npm install @aspose/3dPaso 2: Cargar el archivo de origen
Crea un Scene y llama a scene.open(). Usa la clase *LoadOptions específica del formato para obtener los mejores 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);Paso 3: Guardar en el formato de destino
Llame scene.save() con la ruta de salida. El formato de salida se detecta a partir de la extensión del archivo.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Nota: FBX no es compatible con la detección automática de
scene.save(). La extensión.fbxno está vinculada a ningún exportador — al guardar en.fbxse escribe silenciosamente contenido en formato OBJ. Use OBJ, glTF, STL, 3MF o COLLADA para una salida fiable.
Paso 4: Ejemplos comunes de conversión
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ón automática de FBX no está implementada en
scene.open(). Un archivo.fbxpasado ascene.open()no es reconocido por ningún detector de formato y pasa al analizador STL, que fallará o producirá basura. Las clases de importación/exportación de FBX existen en la biblioteca pero requieren invocación directa en lugar de la API de alto nivelopen()/save(). Use COLLADA, OBJ o glTF como 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');Paso 5: Conversión por lotes de varios archivos
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 Conversión Admitida
| De \ A | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX no es compatible a través de la API de alto nivel open()/save() — el formato no está integrado en la detección automática. Todas las celdas FBX anteriores son ✗.
Problemas comunes y soluciones
Los materiales se pierden después de la conversión
Los materiales OBJ (usemtl, .mtl archivo) se cargan cuando ObjLoadOptions.enableMaterials = true. Al guardar en glTF, las propiedades de material PBR se asignan automáticamente. Los materiales complejos (procedurales, de múltiples capas) pueden convertirse con fidelidad reducida.
La malla aparece escalada incorrectamente
Los diferentes formatos utilizan diferentes unidades predeterminadas (milímetros para STL, metros para glTF). Use ObjLoadOptions.scale al cargar o StlSaveOptions.scaleFactor al guardar para normalizar las unidades.
Desajuste del sistema de coordenadas (modelo volteado o rotado)
Algunos formatos usan Y‑up a la derecha, otros Z‑up. Use ObjLoadOptions.flipCoordinateSystem = true o aplique una rotación al nodo raíz después de cargar.
Preguntas frecuentes
¿La conversión conserva animaciones?
Los datos de animación se conservan al convertir entre formatos que los admiten (p. ej., COLLADA → glTF). STL y OBJ no transportan datos de animación. FBX no es compatible a través de scene.open()/scene.save(), por lo que los recorridos de ida y vuelta de animación FBX no están disponibles mediante la API de alto nivel.
¿Se conserva la información de textura?
Las texturas referenciadas por los materiales OBJ o incrustadas en glTF se trasladan al grafo de escena. Al guardar en GLB (binaryMode = true), el búfer binario se incrusta en un solo archivo. Para la salida OBJ, las texturas se guardan como archivos separados junto al .obj.
¿Puedo convertir muchos archivos en paralelo?
scene.open() y scene.save() son sincrónicos. Use Node.js worker_threads para procesamiento paralelo.