Exportar malla de Wonderland Engine como archivo OBJ

Al generar mallas en tiempo de ejecución, puede ser útil usar otras aplicaciones para inspeccionar el resultado. Esto ayuda cuando la malla generada no se renderiza en absoluto.

Wavefront OBJ es un formato muy simple basado en texto que se puede escribir desde tu componente de JavaScript de Wonderland Engine.

Fragmento de código 

El siguiente fragmento de código recibe un Mesh, escribe un archivo OBJ para posiciones e índices, y finalmente descarga automáticamente el archivo de manera programática.

import {MeshAttribute} from '@wonderlandengine/api';

export function wleMeshToOBJ(wleMesh) {
    /* Recuperar un accesorio de atributo para posiciones.
     * Puedes extender fácilmente este script para también exportar normales
     * y atributos de textura. */
    const positions = wleMesh.attribute(MeshAttribute.Position);

    const lines = [];
    for(let i = 0; i < positions.length; ++i) {
        const [x, y, z] = positions.get(i);
        lines.push(`v ${x} ${y} ${z}`);
    }

    const indexCount = wleMesh.indexData.length;
    for (let i = 0; i < indexCount;) {
        /* Los índices .obj comienzan en 1, no en 0 */
        lines.push(`f ${wleMesh.indexData[i++] + 1} ${wleMesh.indexData[i++] + 1} ${wleMesh.indexData[i++] + 1}`);
    }

    /* Concatenar todas las líneas y generar un blob binario para descargar */
    const blob = new Blob([lines.join('\n')], {type: 'text/plain'});
    const url = URL.createObjectURL(blob);

    /* Descargar automáticamente el blob programáticamente como un archivo llamado 'mesh.obj' */
    const link = document.createElement('a');
    link.href = url;
    link.download = 'mesh.obj';

    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}