跳到主要内容

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);
}