碰撞检测

1、做各自的obb包围盒

2、找到一个轴,两个凸形状在该轴上的投影不重叠,则这两个形状不相交。

 

针对某一分离轴L,如果包围盒A与包围盒B在轴L上的投影的半径和小于包围盒中心点间距在L的投影距离,那么包围盒A与包围盒B处于分离状态。使用运算式来表达就是:|T * L|>rA + rB。

 现在知道了分离轴定理的原理,下面则是如何选取分离轴。由于潜在的分离轴可能存在无数种,所以我们并非去要逐个验证,而是选取几个可测试的轴即可。我们以长方体的碰撞为例,两个长方体的碰撞可以将其归结为以下几种组合:面-面碰撞、面-边碰撞、边-边碰撞(顶点视为边的一部分)。所以实际上在取分离轴的时候,只需要分别取第一个包围盒的3个坐标轴,第二个包围盒的3个坐标轴,以及垂直于某一轴的9个轴(其他的分离轴都是跟这15个分离轴中的某一个轴平行的轴,投影所得线段值都一样,无需再验证)。

       这里再解释以下什么是垂直于某一轴的9个轴,具体的做法就是,首先取包围盒A的x轴方向的某一边矢量,再取包围盒B的x轴方向的某一边矢量,对两个矢量做叉积,求出一个垂直于A的矢量与B的矢量的方向矢量,这个结果就是需要使用的分离轴。按照这种做法,取A的x轴方向的边矢量分别与B的三个轴方向的边矢量做叉积,再取A的y轴方向与B的三个轴方向的边矢量做叉积,再取A的z轴方向的边矢量与B的三个轴方向的边矢量做叉积,结果一共3*3个分离轴。

 

posted @ 2024-06-17 15:19  Tjguo  阅读(6)  评论(0编辑  收藏  举报