03 2月

axis-aligned bounding boxes碰撞检测

作者:will 网址:http://ymuhua.com/2016/02/03/aabb/

再讲加速算法之前,我要来介绍bounding box的概念,中文翻译成边界盒子,一般简称bbx。为什么要引入bbx呢。因为bbx可以代表一个物体体积范围,在模型很复杂的时候,如果每根光线都要和复杂模型进行碰撞运算会非常的慢,所以,一个快速简单的方法就是先和这个代表物体体积范围的bbx先进行快速碰撞检测,如果没碰到就不需要进行复杂模型的碰撞检测,这要大大减少了碰撞检测的运算量。加快了速度。

bbx

axis-aligned bounding box必须满足它是和轴向对齐,也就是每个面都满足垂直末个轴向。

如何求一根射线和一个box相交呢?我们先考虑2d情况。

我们还记得光线方程: p=o+td;

bbx2

图(a)x0,x1,y0,y1这四根是从box表面无线延伸的直线,图(b)一根光线射出,和x0,x1,y0,y1四根线分别产生四个交点,t0,t1,t2,t3。t0,t1表示一个线段x,t2,t3表示一个线段y,我们发现当x和y重叠的时候,光线就和box相交了。我们看下图。

bbx3

所以我们算法就是找这两断线段有没有重叠。

除了以上的规律外,我们还要考虑特殊情况,如下图。

bbx4

黑点表示的光线的起点。这是4种特殊情况,图(a)虽然他满足重叠规律,但是光线并没有穿过box,这时候所有的t满足,t<0。图(b)光线从物体表面和内部出发。

代码:

碰撞检测

转载请注明作者和出处,谢谢。http://ymuhua.com/2016/02/03/aabb/

 

 

发表评论

电子邮件地址不会被公开。