对于3D MMO游戏来说,游戏后端需要实现寻路功能,recastnavigation是最为经典实用的一个。recastnavigation项目自带了RecastDemo,用图形化的界面帮助用户认识寻路网格(navmesh)的生成以及寻路的过程。
recastnavigation官网地址: https://github.com/recastnavigation/recastnavigation
NavMesh(导航网格寻路)= 邻接的凸多边形(Recast) + A*寻路(Detour)
Recast,用于生成邻接的凸多边形集合数据,使用参照示例:RecastDemo/Sample_SoloMesh.cpp
- ① Solo Mesh,纯粹的邻接凸多边形集合。
- ② Tile Mesh,基于Tile划分的N个邻接凸多边形集合。
- ③ Temp Obstacles,支持动态障碍物的,基于tile划分的N个邻接的凸多边形集合。
Detour,基于邻接的凸多边形集合的A*寻路算法,示例参照:RecastDemo/NavMeshTesterTool.cpp
RecastDemo是recastnavigation的一个演示项目,包含了recastnavigation的所有功能,官网对它的介绍为
You can find a comprehensive demo project in the RecastDemo folder. It’s a kitchen sink demo showcasing all the functionality of the library. If you are new to Recast & Detour, check out Sample_SoloMesh.cpp to get started with building navmeshes and NavMeshTesterTool.cpp to see how Detour can be used to find paths.
下载源码之后开始构建RecastDemo,按照官网的介绍,需要premake5和SDL2
premake5的下载地址: https://premake.github.io/download
SDL2的下载地址: https://github.com/libsdl-org/SDL/releases
windows下载的是SDL2-devel-2.26.3-VC.zip
然后把premake5.exe放入RecastDemo目录下,SDL2-devel-2.26.3-VC.zip解压放入RecastDemo\Contrib 目录下,并重命名为SDL
1、Navigate to the RecastDemo folder and run premake5 vs2022
2、Open Build/vs2022/recastnavigation.sln.
3、Set RecastDemo as the startup project, build, and run
然后在RecastDemo的bin目录下有了一个RecastDemo.exe,直接执行
源码结构:
- DebugUtils 调试
- Detour 利用导航网格做寻路操作。导航网格可以使Recast生成的,也可以是其他工具生成的。
- DetourCrowd 提供群体寻路行为的功能
- DetourTileCache Tile缓存
- Recast 根据提供的模型生成用于寻路的导航网格
- RecastDemo 展现Recast、Detour提供的功能的Demo
- Test 测试
SoloMesh生成过程(RecastDemo/Sample_SoloMesh.cpp中handleBuild函数),导航网格生成步骤:
- 场景模型体素化(Voxelization),或者叫光栅化(Rasterization)。
- 过滤可行走表面(Walkable Suface)
- 区域生成(Region)
- 轮廓生成(Contour边缘)
- 轮廓网格生成(Poly Mesh)
- 三角形化(Triangulation)生成细节网格(Detailed Mesh)
类别 | 可配置参数 | 参数说明 |
体素块大小配置(Rasterization) | Cell Size | 体素块底部边长 |
Cell Height | 体素块高度 | |
Agent可走区域标识(Agent) | Height | 配置可走高度 |
Radius | 可走半径 | |
Max Climb | 最大爬坡高度 | |
Max Slope | 最大爬坡角度 | |
区域(Region) | Min Region Size | 最小未连接的区域大小 |
Merged Region Size | 合并的区域大小 | |
区域生成算法(互斥)(Partitioning) | Watershed | 分水岭算法 |
Monotone | 单调算法 | |
Layers | 分层算法 | |
高度区间过滤(可选)(Tile Mesh)(Polygonization) | Low Hanging Obstacles | 不可走变可走 |
Ledge Spans | 峭壁区间检查 | |
Walkable Low Height Spans | 同列相邻距离检查 | |
凸多边形相关参数(Temp Obstacles)(Polygonization) | Max Edge Length | 限制最大轮廓边长 |
Max Edge Error | 允许最大边界误差(轮廓优化) | |
Ver Per Poly | 多边形最大顶点数 | |
详细三角形生成参数(DetailMesh) | Sample Distance | 采样等分距离 |
Max Sample Error | 最大采样距离允许误差 |
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
一个具有注脚的文本。1
Markdown将文本转换为 HTML。
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
我们依旧会支持flowchart的流程图:
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎