quake aas初探

aas这块数据,从代码上来看,就是用于机器人寻路的。


quake根据bsp树来生成aas

这里简要说明一下bsp树,简单的说,就是利用场景中的每一个面,对空间进行分割(area)。


quake会计算每个空间的连勇性,这样就得到了cluster,每个相连通的area处在同一个cluster里

一般来说,一个场景只有一个cluster


如果存在不连通的情况,说明场景里有port(这个port不是bsp分割中的port概念,而是关卡设计师设计的传送点,门等)

从代码上看是这样。


我们先不考虑有不连通的情况,即假设场景中所有area都是连通的,整个场景只有一个cluster.


再来看quake的机器人自动寻路算法.


首先是机器人要能看到玩家, 有一个AINode_Seek_LTG函数,就是用来确定机器人要走到哪儿goal

确定的方法很简单,机器人是否能"看到"玩家,即机器人与玩家之前,进行一个碰撞检测调用(trace函数)


得到玩家的位置后,就是goal,当时也可以以其它方式确定goal,

goal就是目标坐标所在的area


确定了移动的目标坐标,就开始计算移动到目标area的最佳路径

在bspc这个程序中,quake会预先生成area的连通数据(前面说过了基于bsp)


机器人所在的位置orig(是一个area),遍历该area的reachability(也是一个area),计算该reachability与goal之间的最小距离

(其实代码中是计算时间,每种地形会有一个时间加权,这里简单描述,就认为地形加权都是一样的,时间就是距离)


quake会缓存route,何谓route,也就是某个cluster中的某个area到该cluster中其它area所花的时间.

因为有一定的计算量,所以要保存每次计算结果.


所以,在路之前,先把goal的route数据计算出来并缓存,这样就得到goal与当前cluster中所有area的距离(我们假设只有一个cluster)

再回到机器人处于位置orig area的reachability area,取到goal最小的距离的那个reachability.

作为机器人移动的依据。


goal不变的情况下,第二次寻路就可以直接用缓存中的数据了。


现在再来看场景中有两个cluster的情况,

这种情况下,如果goal与orig不在同一个cluster,自然先移动到port,原理其实一样,相当于插入一些过渡性的goal.


基于bsp的渲染与碰撞检测,以及aas 雷神引擎的三个重要的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值