Экспорт сетки Wonderland Engine в файл OBJ

Когда сетки генерируются во время выполнения, может быть полезным использовать другие приложения для проверки результата. Это помогает, если сгенерированная сетка не рендерится вообще.

Wavefront OBJ - это очень простой текстовый формат, который можно записать из вашего JavaScript-компонента Wonderland Engine.

Код 

Следующий код принимает Mesh, записывает OBJ-файл для позиций и индексов, и в конце автоматически загружает файл программно.

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

export function wleMeshToOBJ(wleMesh) {
    /* Получаем доступ к атрибуту для позиций.
     * Вы можете легко расширить этот скрипт для экспорта
     * нормалей и текстурных атрибутов. */
    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;) {
        /* Индексы .obj начинаются с 1, а не с 0 */
        lines.push(`f ${wleMesh.indexData[i++] + 1} ${wleMesh.indexData[i++] + 1} ${wleMesh.indexData[i++] + 1}`);
    }

    /* Соединяем все строки и создаем бинарный блоб для загрузки */
    const blob = new Blob([lines.join('\n')], {type: 'text/plain'});
    const url = URL.createObjectURL(blob);

    /* Автоматически загружаем блоб как файл с названием 'mesh.obj' */
    const link = document.createElement('a');
    link.href = url;
    link.download = 'mesh.obj';

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