Экспорт сетки 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);
}