recast 生成navmesh主要流程

参考: 
    critterai   http://www.critterai.org 

 关于理解 NavMesh 生成:
    关于 PolyMesh 的理解,尤为是其有关多边形信息的格式,对于理解 rcPolyMesh 很是关键:
 一则关于 Mesh 导入转换成 NavMesh 的讨论帖子: 
 一则关于做者说不添加导入普通 Mesh 到 NavMesh 功能的讨论贴子:
   一个介绍CritterAI与Recast Navigation寻路的帖子

recast生成导航网格并非直接用Mesh的原始面片开始合并的
先从平面几何体构建体素,再生成NavMesh
旋转一个物体会影响他的NavMesh生成结果

recast.h 中有大的步骤函数的定义

recast生成的5个步骤:
1 体素化: 将场景中全部物体体素化,保证体素信息覆盖所有原始几何体
2 生成移动区域: 
    a 将体素的上表面取出,为潜在可移动区域
    b 剔除 距离阻挡(墙,家具)太近的 和 上表面过小不足以移动的(桌子,扶手)
     c 合并能够移动的面,根据高度差,中间有没有阻挡等
    d 剔除过小的面(最小面积)
   
3 生成轮廓(Contour):
    a 从体素空间转为向量空间
    b 从上一步的移动区域生成很是详细的多边形信息 
       Marching squares算法  https://en.wikipedia.org/wiki/Marching_squares 
    c 简化相邻多边形的边界
        Douglas-Peucker算法  https://en.wikipedia.org/wiki/Polygonal_chain 
    b 简化外部边界(连接空的边)
    d 优化边界长度(限定最长边线)
    
4 生成凸多边形:将轮廓几何体细分为凸多边形
5 生成高度信息:将高度信息写入顶点
    Delaunay triangulation 让三角形统一化
    
相关文章
相关标签/搜索