游戏AI
zhouwangyuan
这个作者很懒,什么都没留下…
展开
-
COPY 一种接近最优的导航网格生成算法以及基于导航网格的寻路算法
提出背景:长距离寻路会出现掉帧现象,为了提高寻路速度,并为3D环境中的寻路方案提供基础算法实现。 目前状况:由于3D游戏对帧率要求很高,而在游戏中进行一次长距离的寻路可能要花费8-10帧的时间,在地图复杂的情况下寻路时间甚至可能会更严重,而在这段时间,渲染循环会暂停渲染并等待寻路结果。会给玩家带来不流畅的操作体验。特别是3D游戏中地图比较复杂,地图规模比较大,对于一张600*6转载 2014-12-31 11:19:37 · 3226 阅读 · 0 评论 -
COPY NAV导航网格寻路(4) -- 生成nav网格
假设上图是一个游戏地图,红色的区域是不可行走的区域,浅灰色区域是可行走区域,要想在游戏中实现nav寻路,必须将可行走区域转化为nav网格并保存为一种固定形式的数据,如下图浅红色的三角形。nav网格必须是凸多边形,这里使用三角型,当然也可以使用4边形。下面介绍一种任意多边形的三角化算法。算法来自论文《平面多边形域的快速约束 三角化》作者:曾薇 孟祥旭 杨承磊 杨义军。详细内容请参考该转载 2014-12-31 11:26:50 · 1118 阅读 · 0 评论 -
COPY NAV导航网格寻路(5) -- 生成网格的一些补充
如果你也实现了上一章提到的代码,不难发现对下图的两种情况会出现问题左面的是两个区域有相交的情况,右面的是多边形本身有自交,在这两种情况下,前面给出的代码均会产生错误的结果。对于两个多边形相交,可以在生成网格之前先合并多边形,合并后如图合并算法在前面多边形剪裁处已给出一个,这里只贴上代码: /** * 合并两个多边形转载 2014-12-31 11:27:31 · 1198 阅读 · 0 评论 -
COPY NAV导航网格寻路(1)
http://www.ai-blog.net/archives/2008_07.htmlWayPoint寻路下图是一个典型的路点寻路 另一种方法是使用多边形来记录路径信息,它可以提供更多的信息给ai角色使用。下图就是一个navigation mesh。 以下列出几个WayPoint的不足之处:一些复杂的游戏地图需要的WayPoint数转载 2014-12-31 11:24:23 · 893 阅读 · 0 评论 -
COPY NAV导航网格寻路(7) -- 代码和一些优化
看下图,最优路径应该是从上面绕过中间阻挡区,而实际寻路产生的路径确是下面。这是由于,在网格面积过大或有某边长度过长时,由于a*中的花费是计算网格的两边中点距离而不实际的路径长度,所以产生的路径偏差较大。所以在一般的网格生成算法中都会加入网格最小面积和最大面积的限制,如果生成的网格小于最小面积时则抛弃,如果大于最大面积则拆分。一般地图中都会产生孤岛,如下图,两个阻挡区域交叉,合并后在转载 2014-12-31 11:29:36 · 1142 阅读 · 0 评论 -
COPY NAV导航网格寻路(6) -- 寻路实现
前面已经介绍了寻路的方法,现在给出我的一个实现。A*寻找网格路径A*算法就不说了,网上很多,这里只说下三角形网格如何使用A*算法,如下图,绿色直线代表最终路径和方向,路径线进入三角形的边称为穿入边,路径线出去的边称为穿出边。每个三角形的花费(g值)采用穿入边和穿出边的中点的距离(图中红线),至于估价函数(h值)使用该三角形的中心点(3个顶点的平均值)到路径终点的x和y方向的距离。转载 2014-12-31 11:28:46 · 1077 阅读 · 0 评论 -
COPY NAV导航网格寻路(3) -- 一些必要的计算几何知识
在继续下面的nav网格生成算法之前,先介绍一下涉及到的计算几何知识。这里只罗列出结论,要详细了解参考相关书籍。矢量加减法: 设二维矢量P = ( x1, y1 ),Q = ( x2 , y2 ),则矢量加法定义为: P + Q = ( x1 + x2 , y1 + y2 ),同样的,矢量减法定义为: P - Q = ( x1 - x2 , y1 - y2 )。显然有性质 P + Q =转载 2014-12-31 11:26:09 · 667 阅读 · 0 评论 -
COPY NAV导航网格寻路(2) -- 寻路方法
nav寻路一般包含两部分,首先是使用工具根据地图信息生成寻路用的nav mesh,接下来就是在游戏中根据生成的nav mesh来自动寻路。一般人首先关心的就是寻路方法,所以这里把顺序颠倒下,先说寻路。一. 使用A*寻找所经过网格路径 下图为一个已经生成nav网格的地图,深红色区域为不可行走区域,浅红色区域为可以行走的区域。如下图,现在如果要寻找从A点到B点转载 2014-12-31 11:25:14 · 1182 阅读 · 0 评论 -
COPY NAV导航网格寻路 -- 光照射线法
Navigation Mesh与Line-of-Sight Test上图是一个由任意凸多边形构成的导航网格,白线包围区域代表着不可进入的障碍区域,红线包围区域则可以进入或穿越。网格中所有多边形的顶点存储次序均为顺时钟序。在下面的讨论中,我们的运算一概采用左手系进行。假设当前所处的位置为p0,视线方向矢量为n0,p0位于多边形A中,我们知道每一条边的两侧的多边形的编号,现转载 2014-12-31 11:31:47 · 3956 阅读 · 0 评论 -
SRC 向量
Vector3 forward = transform.forward Vector3 right = new Vector3(forward.z, forward.y, -forward.x); // 垂直于当前向量的右向量 Vector3 left = new Vector3(vector3.x * -1,vector3.y * -1,vector3.z * -1);原创 2015-01-05 13:35:06 · 346 阅读 · 0 评论