Cómo convertir modelos 3D en TypeScript

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/3d

Paso 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 .fbx no está vinculada a ningún exportador — al guardar en .fbx se 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 .fbx pasado a scene.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 nivel open()/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 \ AglTF/GLBOBJSTLFBX3MFCOLLADA
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.


Ver también

 Español