基于分离轴定理的碰撞检测算法.doc_第1页
基于分离轴定理的碰撞检测算法.doc_第2页
基于分离轴定理的碰撞检测算法.doc_第3页
基于分离轴定理的碰撞检测算法.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于分离轴定理的碰撞检测算法摘要:在游戏开发中,为了不使游戏中的物体相互穿越,需要使用碰撞检测技术来约束场景中物体的行动,本文比较了常用的几种碰撞检测算法的优劣,探讨了分离轴定理在碰撞检测中的应用及优势。关键词:碰撞检测 包围盒 凸多边形 分离轴定理中图分类号:th721文献标识码:a 文章编号:1007-9416(2012)08-0102-01无论是pc游戏,还是移动应用,碰撞检测始终是程序开发的难点,甚至可以用碰撞检测作为衡量游戏引擎是否完善的标准。好的碰撞检测要求人物在场景中可以平滑移动,在各种前进方向被挡住的情况下都会尽可能地沿合理的方向滑动而不是被迫停下,不会在特殊情况下穿墙而掉出场景。因为碰撞现象符合日常生活中的常识。如果出现bug,很容易被人发现,例如人物无缘无故被卡住不能前进或者人物穿越了障碍。所以,碰撞检测的重要性不言而喻。1、常见的碰撞检测算法最为精确的碰撞检测算法是像素检测算法,即对物体的每个像素进行测试,当像素出现重叠,即为碰撞,但这种算法的计算量很大,在移动设备上会严重拖慢游戏的运行速度。,所以很少使用。当精确度要求不高时,可以用包围球算法,即用物体轮廓的外接圆把物体包围起来,这样要测试两个物体是否碰撞,只需要计算两个圆之间的距离是否大于两个圆的半径之和,如果大于,则说明没有碰撞,反之则碰撞。由于大多数情况下包围球的紧密型和简单性都不够理想,所以很少单独使用。另外一种aabb(axially aligned bounding box)即沿坐标轴包围盒算法,即把物体抽象成一个边和坐标轴平行的矩形,简单性好,但是紧密型要差。还有obb(oriented bounding box)即方向包围盒算法,紧密型最好,但是计算量要大一些。一般的精确度完全可以胜任,计算量也在移动设备可承受的范围,所以比较常用。obb包围盒的碰撞检测算法一般用的是分离轴测试算法。2、基于分离轴定理的碰撞检测算法分离轴定理(separating axis theorem,sat)提出,如果能找到一条轴,使得两个物体在该轴上的投影互不重叠,那么着两个物体就是不相交的。所以问题的关键如何找到这条轴。这种算法只适用于凸多边形,所谓凸多边形,就是把一个多边形任意一边向两方无限延长成为一条直线,如果多边形的其他各边均在此直线的同旁,例如三角形,四边形,六边形,圆形等。对于非凸多边形,可以将其分解为多个凸多边形。算法还可以处理重叠的问题,并促使重叠的物体分离。在2d的情况下,两个多边形每条边的法向量包含了这条轴的所有可能性。所以我们只需要枚举两个多边形的每条边的法向量即可。2d向量的法向量即是垂直于这个向量的一个向量,向量(x,y)的法向量可以表示为(y,-x)或(-y,x),这个算法不需要考虑方向,所以任选一种即可,然后分别计算这两个多边形的所有点在此向量上的投影,并求出最大最小区域,如果没有重合,那么直接确定这两个多边形不重合,如果有重叠,那么就计算出相交的最小深度及其方向(推动向量,称为mtd,用于把两个物体推开)并继续判断下一条边的法向量。步骤为:(1)计算多边形一条边的法向量。设这边的两个顶点为(x1,y1)和(x2,y2),那么这条边就可以用向量表示为(x1-x2,y1-y2),法向量为(y2-y1,x1-x2)。(2)分别计算每个多边形的每条边在这个法向量上的投影,找出最大值和最小值。设边的向量为(x1,y1),法向量为(x2,y2),那么边在法向量上的投影dot的计算方法为:temp1=x2*x2+y2*y2;temp2=x1*x1+y1*y1;dot_x=temp2*x2/temp1;dot_y=temp2*y2/temp1;dot=dot_x*x2+ dot_y*y2;对多边形的每条边计算出dot,并找出最大值和最小值。(3)比较两个多边形的最大值和最小值是否有交集,如果有交集,则转到(1)继续计算下一条边的分离轴,如果没有则说明找到了一条轴,使两个物体在这条轴上的投影不重叠。说明这两个物体没有碰撞,可以结束计算。如果找不到这样的轴,则说明物体重叠,计算出点积值最小的那条分离轴,即推动向量。在碰撞反馈中,让两物体按一定的比例沿推动向量向相反方向分开即可。3、分离轴碰撞检测算法的优化由于分离轴算法计算量比较大,所以实际用的时候要和其他算法结合起来来减少计算量。常用优化策略有一下这些:(1)每两个物体只检测一次。(2)物体先进行粗略的包围球测试,再进行精确一些的aabb包围盒测试,通过之后再进行分离轴测试,这样可以减少很多不必要的计算量。(3)对于obb包围盒来说,多边形的四条边是两两平行的,所以每个多边形只需要测试两条边,两条分离轴。4、结语分离轴测试检测算法相对于像素检测算法少了一些精确度,但是省去了很多的计算量;相对于包围球,包围盒算法多了一些计算量,但是提高了很多的精度。经过过滤优化之后,分离轴测试算法完全可以胜任移动设备上的碰撞检测任务。而且这种算法基于向量数学,可以扩展到3d,值得深入研究。参考文献1陈雷,伊明,陈二雷.基于包围盒的碰撞检测算法研究j.电脑知识与技术(学术交流),2007.14.2章勤,黄琨,李光明.一种基于obb的碰撞检测算法的改进j.华中科技大学学报(自然科学版),2003.1.3董向阳,张佐刚.基于层次包围盒的碰撞检测算法研究a.2006系统仿真技术及其应用学术交流会论文集c,2006

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论