RecastNavigation-理解高度场
来源:互联网 发布:淘宝模板是什么格式的 编辑:程序博客网 时间:2024/06/16 23:54
本文翻译自CtritterAI:http://critterai.org/projects/cainav/doc/html/6fb3041b-e9be-4f03-868b-dcac944df19b.htm
RecastNavigation是一款非常强大的寻路系统,被广泛的应用于各大游戏引擎中。如Unreal,Unity等。我之前也尝试看过部分RecastNavigation源码,添加了一些注释,放到了我自己的github上(https://github.com/youlanhai/recastnavigation-learn)。
CritterAI是基于RecastNavigation原理开发的一套寻路系统,因此理解了CritterAI也就相当于理解了RecastNavigation。因为RecastNavigation的学习资料比较少,当我看到这篇文章的时候,觉得能够帮助我们去深入理解RecastNavigation,所以就翻译下来跟大家分享,有翻译不当的地方尽请指正。以下是原文翻译:
概述
为了能够运用高级导航网格的生成特性,你需要理解NMGen构建流程的核心。为了理解这个构建流程,你需要理解高度场(heightfield)。这里有两种高度场:体素集(voxel field)和顶点集(vertex field)。
体素集包括普通高度场(Heightfield)和紧缩高度场(CompactHeightfield)。
顶点集包括轮廓集合(ContourSet)和多边形网格(PolyMesh)。
高度场结构概要(Basic Heightfield Structure)
想象一下,一个位于欧几里得空间(euclidean space)的AABB,它的边界使用了最小和最大顶点来定义。
现在,使用固定的宽度和深度(XZCellSize)将盒子沿着垂直方向切割成列。每列就是一个格子。
接下来,使用固定的高度增量(YCellSize)切割每一列,将每一列都分割成小的轴对齐包围盒。每个盒子就是一个体素。位于盒子角落的8个顶点就是顶点集。
顶点集相对来说容易理解,他们就是格子中的顶点。但是体素需要更多的解释。
实心高度场(The Solid Hieghtfield)
在这篇文章中,术语体素常被区间(span)替代,因为区间是压缩存贮的体素。
想象一下,有这样一列体素。体素可能是一个实心的区域,代表了障碍物;也可能是开阔的空间,表示了这个位置什么也没有。
我们把一列上连续的实心体素合并成一个实心的区间。
这些实心的区间,使用HeightfieldSpan结构来存贮。实心区间组成了一个高度场,表示了障碍空间。
开放的紧凑型高度场(The Open Compact Heightfield)
我们不会只关注实心空间本身,许多算法都是在实心区间的上方执行的。对于生成导航网格而言,比实心空间更重要的是它的上方空间。开放区间,表示的就是这样的空间1。
需要特别注意的是,开放区间并不是简单的将实心空间取反。如果高度场的某一列不包括任何的实心区间,那么它也就没有开放区间。同样,位于实心区间最下方的部分也会被忽略掉2。位于一列中的开放区间,是从一个实心空间顶部开始,向上延伸到邻接的实心区间底部。(如果上方没有实心的区间,那么就一直延伸到无穷远)
注意:下面的例子表示的是开放区间,尽管第一眼可能看不到明显的区别,但可以观察到3个开放区间(黄色)。
开放区间,使用CompactSpan结构来存贮,他们组成了紧缩高度场,代表了开放空间。
- 译注:实心空间之上的那部分空间 ↩
- 译注:因为那是悬空的,角色不能站在空中 ↩
- RecastNavigation-理解高度场
- RecastNavigation-NavMesh生成原理
- 随机场的一点理解
- 条件随机场理解-CRF
- How to Build RecastNavigation with VC2015
- 帧、场编码的个人理解
- 帧、场编码的个人理解
- [转]帧、场编码的个人理解
- 简单通俗理解MRF马尔可夫随机场
- 帧、场编码的个人理解
- 深入理解高度。获取屏幕、webview、软键盘高度
- cocos2d-x导航网格之recastnavigation-master环境配置
- 直观地理解HTML的高度
- jQuery窗口、文档各种高度的理解
- jQuery窗口、文档各种高度的理解
- 临睡前的十分钟,决定未来职场的高度
- 关于职场成功的几点理解
- 机器学习之条件随机场CRF一点理解
- Visual Studio 2017 生成dll时无法解析的外部符号 main问题
- Android 组件化-模块化之路——在展示层搭建MVP结构
- Java对象与Json对象的相互转化之Jackson实现方式
- 人生还是无题
- scikit-learn(一)
- RecastNavigation-理解高度场
- 搭建自助Git服务
- Subime Text 3快捷键的使用
- 关于各浏览器下textarea中光标位置的获取问题详解
- 同余方程
- ROBOT XRT1 介绍
- 计算机网络基本概念
- 使用HttpClient发送GET和POST请求
- HDU