-
光线与包围盒(AABB)的相交检测算法
这里介绍两种算法,第一种比较容易理解
下面是Cocos2dx中实现Ray-AABB相交(碰撞)检测的算法,说明看注释
下面是另外一种Ray-AABB检测算法,称为"Slabs method"
观察上述三幅图可以得出,只要发生区间交叠,光线与平面就能相交,
那么区间交叠出现的条件便是:光线进入平面处的最大t值小于光线离开平面处的最小t值
那么问题就变成了如何求 光线进入平面处的最大t值 以及 光线离开平面处的最小t值
这个问题很简单,通过光线与平面相交的参数方程求解就可以了,
光线的参数方程为R(t) = O + t * Dir
一般平面方程为aX+bY+cZ+d=0,因为AABB的六个面分别平行于XY、XZ、YZ平面,所以平面的方程为X=d,Y=d,Z=d
光线与垂直于x轴的两个面相交时,t = (d - O.x) / Dir.x
光线与垂直于y轴的两个面相交时,t = (d - O.y) / Dir.y
光线与垂直于z轴的两个面相交时,t = (d - O.z) / Dir.z
注意到t<0时,交点位于光线的起点之后,则光线(射线)并未与盒体发生相交
版权声明:本文为博主原创文章,未经博主允许不得转载。