Recast Navigation 学习笔记(一)

 

RecastNavigation下载地址

https://github.com/recastnavigation/recastnavigation

CritterAI 下载地址

http://www.critterai.org/

 

Recast/Detour文档

http://masagroup.github.io/recastdetour/index.html

理解 Heightfileds

http://www.critterai.org/projects/cainav/doc/html/6fb3041b-e9be-4f03-868b-dcac944df19b.htm

处理过程(这个文档描述的更为详细)

http://www.critterai.org/projects/cainav/doc/html/e72bd1ee-04b0-4bbb-a21d-d8d7ecaa11af.htm

 

Recast Navigation


Recsat 是先进的游戏导航网格制作工具。

  • 自动生成,可输入任意关卡几何体并会生成网格。
  • 快速,可快速生成关卡数据。
  • 代码开放,可自定义核心数据。

Recast 先用关卡几何体生成体素模型,然后再生成导航网格覆盖它。处理过程有三步组成:①构建体素模型 ②把模型划分到简单的区域 ③用多边形替换这些区域

  1. 体素模型是将输入的三角面栅格化到多层高度域,并简单剔角色不会移动的位置而成。
  2. 可移动区被划分为多层二维区域。这些区域都有唯一的非重叠等高线,这样可以简化最后一步的处理过程。
  3. 用多边形替换这些区域:导航多边形沿着这些区域的边界被剥离并简化。

Detour


 

Recast

    Recast 中的模块用于创建网格数据,Detour会用这些数据创建导航网格。

    创建导航网格需要好多步骤,具体如下:

  1. 准备三角面
  2. 构建 rcHeightfield:描述高度域阻挡,rcCreateHeightfield,rcAllocHeightfield
  3. 构建 rcCompactHeightfield:描述无阻挡高度域
  4. 构建 rcContourSet:描述所有轮廓的集合
  5. 构建 rcPolyMesh:描述多边形网格,用于构建导航网格(未三角化的凸多边形集合)
  6. 构建 rcPolyMeshDetail:三角面网格
  7. 用 rcPolyMesh 和 rcPolyMeshDetail 构建 Detour 的导航网格

     正常生命周期大致如下:

  1. 分配 Recast allocator 分配对象(如 rcAllocHeightfield)
  2. 初始化并构建对象(如 rcCreateHeightfield)
  3. 更新对象(如 rcRasterizeTriangles)
  4. 把对象作为管线的一部分
  5. 释放 Recast allocator 分配对象(如 rcFreeHeightField)

  • 体素化:Recast通过栅格化三角形将输入场景变为体素数组(使用 Conservative voxelization 算法)。可以指定长、宽、高(3D矩形,沿着 X,Z,Y轴方向的)。体素体积越小,计算量越大。Conservative voxelization算法能够确保输入的三角形面被完全包裹在生成的体素中。
  • 过滤:体素数组生成后,会通过一些简单过滤隔离可行走区域的体素。体素是否可行走受许多因素影响。除受自身大小因素,还受到许多代理参数影响。例如:
    • 高度
    • 半径
    • 能爬的最大高度
    • 能行走斜坡的最大角度
  • 分割:可行走区确定后,Recast将把这些区域转化到2D区域。这些区域不重叠(应该是Y轴重叠的区域),这么做有利于下一步骤的处理。
  • 创建多边形:Recast用之前创建的区域和边界生成简单的凸多边形。区域的边界就是多边形的顶点(尽可能大),这些凸多边形用来计算两点间的最短路径。最终会生成两种网格:导航网格和详细网格。
    • 导航网格:可行走区域连接起来的网格,用于描述寻径空间。
    • 详细网格:这个网格对应于导航网格,但有更详细的高度信息。这个高度信息决定是否将不同高度差多边形连接起来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隨意的風

如果你觉得有帮助,期待你的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值