v805-第五章opengl的3d图形渲染课程16碰撞检测_第1页
v805-第五章opengl的3d图形渲染课程16碰撞检测_第2页
v805-第五章opengl的3d图形渲染课程16碰撞检测_第3页
v805-第五章opengl的3d图形渲染课程16碰撞检测_第4页
v805-第五章opengl的3d图形渲染课程16碰撞检测_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、纹理环境几乎所有的3D游戏都离不开碰撞检测无论是各物体之间的碰撞检测,还是物体与场景之间的碰撞检测。游戏中的穿墙、掐在某个物体里面、因重力无限下落等等bug,是绝不允许出现的。几乎所有的3D程序的场景或者物体都是由许多三角形组成的。碰撞检测就是判断物体和所有三角形间的碰撞,三角形越多碰撞计算复杂度越大。好的碰撞检测要求人物在场景中可以平滑移动,遇到一定高度内的台阶可以自动上去,而过高的台阶则把人挡住,遇到斜率较小的斜坡可以上去,斜率过大则把人挡住,在各种前进方向被挡住的情况下都要尽可能地让人物沿合理的方向滑动而不是被迫停下。在满足这些要求的同时还要做到足够精确和稳定,防止人物在特殊情况下穿墙而

2、掉出场景。包围球碰撞包围盒碰撞AABB、OBB碰撞射线与平面碰撞碰撞反应碰撞检测的方法球是简单的几何形状,用圆心和半径就能表示一个球,因此,测试空间中两个物体是否碰撞最简便的方法就是包围球。包围球之所以简单,还因为物体不管怎么旋转,都不会出包围球。包围球在判断两个球体是否相交时,只要两个球的球心之间的距离小于半径之和,就说明两个球体相交。两个球心的距离为:如果两个球体相交:在实际的应用中,由于开方运算资源消耗大,因此,可以用d与r的平方进行比较:AABB包围盒是一个包围物体的六面盒子,其6个面与x、y、z三个坐标轴平行,无论物体是什么形状,AABB包围盒始终与坐标轴平行,因此不存在方向(ori

3、entation)的问题。由于AABB包围盒始终与坐标轴平行,因此,在物体进行转动时,需要重新计算包围盒。包围盒 AABBAABB包围盒可以由两个对角线上的两个顶点定义:amin和amax沿着坐标轴的方向,取给定多边形中的最大和最小顶点,就可以形成AABB。在计算时,直接比较两个AABB的最大点和最小点的关系,在3个坐标轴上比较最大点与最小点的分量,如果满足条件,说明两个AABB发生碰撞。/当一个包围盒的一个顶点在另外一个包围盒内部的时候即发生碰撞 if(vMax0.x vMin1.x | vMax0.y vMin1.y | vMax0.z vMax1.x | vMin0.y vMax1.y

4、| vMin0.z vMax1.z) g_vAPos.x+=0.02f; g_vBPos.x-=0.02f; 射线上的点 = 射线的原点+ t * 射线的方向(t 用来描述它距离原点的位置,它的范围是0, 无限远).)平面被描述为:Xn dot X = d Xn 是平面的法线,X 是平面上的一个点,d 是平面到原点的距离.得到射线和平面的两个方程:PointOnRay = Raystart + t * RaydirectionXn dot X = d如果相交,则上诉方程组有解,如下所示:Xn dot PointOnRay = d(Xn dot Raystart) + t * (Xn dot Raydirection) = d解得 t:t = (d - Xn dot Raystart) / (Xn dot Raydirection)把t带回原方程会得到与平面的碰撞点,如果Xn*Raydirection=0。则说明它与平面平行,则将不产生碰撞。如果t为负值,则说明交点在射线的相反方向,也不会产生碰撞。射线与平面碰撞为了计算对于一个静止物体的碰撞,需要知道以下信息:

温馨提示

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

评论

0/150

提交评论