recast
简介
导航网格烘焙
@see https://github.com/recastnavigation/recastnavigation#detour
组件接口
auxiliary.gs
函数原型 | 函数作用 |
---|---|
array generate_mesh_2d(array blocks, int width, int height) | 将2D地图数据转换成网格数据 |
void convert_file(array blocks, int width, int height, string out_file_name) | 转换文件 |
mesh_loader.gs
函数原型 | 函数作用 |
---|---|
array load_obj(string filename) | 加载.obj模型 |
recast.gs
函数原型 | 函数作用 |
---|---|
buffer build_nav_mesh(array vertices, array triangles, array volumes, map opt_args = nil) | 生成导航网格(该操作可能比较耗时) |
样例
void main()
{
// 加载.obj模型
let array vertices, array triangles = mesh_loader.load_obj("/dungeon.obj");
// 生成导航网格
buffer nav_mesh = recast.build_nav_mesh(vertices, triangles, nil);
printf("nav_mesh: %O\n", nav_mesh);
// 加载2D地图数据
map scene_data = json.parse((string)file.read_all("/scene_data.json", "b"));
// 将地块三角形化,并根据地块类型生成表示障碍的volumes
let vertices, triangles, array volumes = auxiliary.generate_mesh_2d(scene_data.Blocks, scene_data.Width, scene_data.Height);
// 生成导航网格(以tile方式生成,减小资源开销上限)
nav_mesh = recast.build_nav_mesh(vertices, triangles, volumes, { "tile_size": 32 });
// 持久化导航网格
file.write_all("nav_mesh.bin", nav_mesh);
}