- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高级碰撞检测及响应算法碰撞检测
高级碰撞检测及响应算法——碰撞检测
2010-11-18 22:35
1.概述
移动的物体可以由椭球体近似表达,这种椭球体更容易逼近类人和动物的形状,比如说人的头,就是一个X-Y-Z轴半径相等的椭球体,髋骨,盆骨等都可以较好地用椭球体体现出来。多个椭球体组成的集合的形状也使它们易于在障碍物上平滑地移动,这一点在3D游戏中显得特别重要,因为玩家绝不希望在激烈的战斗中自己被卡在某个死角里不能动弹。
我们希望能在场景中来回移动我们的物体(或者角色)。它可以由一个椭球体表现,其中椭球体的中心位置代表了角色的位置,半径向量则定义了椭球体沿三个轴向的尺寸。见图3.1。
图3.1:椭球体的半径向量
通过对角色施加某方向的力,他就能在场景世界中移动。这个过程由速度向量(velocity vector)表示。我们希望椭球体能够在场景世界中移动,那么它的新的位置等于它当前位置加上速度向量。见图3.2。
图3.2:通过一个速度移动椭球体
但是我们还不清楚我们是否能成功完成这个移动,因为可能在过程中会出现一些事情,例如组成场景世界的一个或者多个三角片挡住了椭球体的去路。我们不可能事先准确地知道椭球体会撞上哪个三角片,所以我们应该检查所有的三角片(这里,可以将一个大的网格体化分成一个八叉树,这个八叉树被用来帮助我们检查那些靠近角色的三角片)。同时,我们还不能在检测到一个可能碰撞的三角片后就立即停止检测,因为我们要检测出所有潜在的障碍,近而找出最近的那一个碰撞。如果我们检测到了一个与三角片A发生的碰撞后就停止,而没有继续检测其它的三角片,例如三角片B,那么将发生如图3.3所示的情况,即三角片B比三角片A更先发生碰撞。
图3.3:必须检测所有的三角片
碰撞检测过程应该为后继的响应阶段提供至少两个必要的信息:?? *?? 球体在场景中的碰撞位置。?? *?? 球体发生碰撞之前,沿速度方向到碰撞点的距离。所以,对于单个三角片的碰撞检测,我们首先要清楚是否会发生碰撞(这将产生一个bool值),如果发生了碰撞,算法应该能够为碰撞响应提供上述两个必要的信息。
2.单个三角片的检测
在e空间中,有一个三角片,它由p1,p2和p3三个顶点所定义,它们以顺时钟排序。另外有一个球体,它位于基点,basePoint,并正沿着它的速度方向运动,速度大小为velocity。如果我们用 t 作为自变量,用方程表达球体的运动过程,那么我们有球体的位置方程:
在三维空间中,一个球体可以由它的位置和半径唯一表示(在e空间中半径是1)。对于运动的球体,半径是常数但是位置是不断变化的。上面的公式给出了球体在任何时刻 t 的位置,这就是所谓的扫掠球(swept sphere)。图3.4表示了这种关系,这一点很重要。由于velocity的大小不清楚,但它与时间的乘积直接影响着扫掠球的位置,而扫掠球每次所作的检测只在一个velocity的长度范围内。那么问题可以转化为:能否在一个[ 0,velocity ]范围内找到碰撞的情况,或者说能否在[0,1]的范围内,找到能满足碰撞特征的t值。在此过程中,解二次方程所得到的t 值的情况,跟velocity的大小有关,图3.9说明了这种关系。
图3.9:速度大小与碰撞的可能情况
同时,对于当前扫掠球的位置而言,可能与它所面对的三角片发生5种关系。具体来讲:?? ***?? 当VN=0时,此时球体平行于平面运动,球体中心到平面的距离要么为1, 要么小于等于1。对于前一种情况,检测提前退出;对于后一种情况,显然在t[0,1]范围内的所有球体位置中,球体与平面均保持相交。?? ***?? 当VN不等于0时,此时球体总会与平面发生碰撞(前提是速度方向有正对平面正面的分量),其形式无非有4种。第一种就是与三角片平面相交,但是不与三角片相交。?? ***?? 球体与三角片内部某点相交。?? ***?? 球体与三角片某顶点相交。?? ***?? 球体与三角片某边缘相交。
图3.4:球体的位置方程
算法的检测程序就从这里开始。其功能是用检测函数将一个扫掠球信息体(空间速度与位置、碰撞是否发生、什么地方发生和发生距离等)与单个三角片信息体(主要是三个顶点坐标信息)进行碰撞检测。并不断循环调用该函数,同时更换函数中的三角片信息体,使当前扫掠球与所有的三角片都被检测到,最后整理并填入扫掠球信息体中的碰撞信息,并在响应过程中更新速度与位置信息。
下面,第一个任务是检测扫掠球是否与三角片所在的平面相交。如果不相交,扫掠球当然不会跟三角片相交。所以我们构造一个平面,叫三角片平面trianglePlane,它是由三角片的三个顶点所确定的平面。如果我们有单位化的平面法向量N和平面常数Cp,那么我们可以计算点p到平面的有符号距离(signed distance):
您可能关注的文档
最近下载
- 免费小学生竞选班长卡通PPT模板 (31).pptx VIP
- 电动汽车控制系统及检修课件-第一部分.pptx VIP
- 高中研究性学习调查报告PPTppt.pptx VIP
- 2025年高考英语阅读理解238个抢分关键词+572个高频词.doc VIP
- 4)-A統計基礎及品質統計.ppt VIP
- 2025最新贵州省专业技术人员继续教育公需科目考试题库及答案(全)).docx VIP
- 赵海洋 十年 完整钢琴谱.pdf VIP
- 2025年高考语文备考之文言文《古文观止》训练50篇.pdf VIP
- 青岛版数学一年级上册《20以内的进位加法》单元整体备课设计.docx VIP
- 2025至2030中国跑腿服务行业市场分析及竞争形势与发展前景预测报告.docx
文档评论(0)