导出 Wonderland Engine 网格为 OBJ 文件
在运行时生成网格时,使用其他应用程序检查结果是非常有用的。这在生成的网格完全不渲染时尤其有帮助。
Wavefront OBJ 是一种非常简单的基于文本的格式,可以从你的 Wonderland Engine JavaScript 组件中导出。
代码片段
以下代码片段接收一个 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}`);
}
/* 将所有行连接并生成一个用于下载的二进制 blob */
const blob = new Blob([lines.join('\n')], {type: 'text/plain'});
const url = URL.createObjectURL(blob);
/* 通过程序自动下载该 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);
}