几何检测 (四)

两个AABB的相交性检测

      检测两个静止AABB的相交性是很简单的,只需要在每一维上单独检查它们的重合程度即可。如果在所有维上都没有重合,那么这两个AABB就不会相交。intersectAABBs()就是用这项技术来实现的。

01 //---------------------------------------------------------------------------
02 // Check if two AABBs intersect, and return true if so.  Optionally return
03 // the AABB of their intersection if an intersection is detected.
04 //---------------------------------------------------------------------------
05 bool intersectAABBs(const AABB3& box1, const AABB3& box2, AABB3* boxIntersect)
06 {
07     // Check for no overlap
08     if (box1.min.x > box2.max.x) return false;
09     if (box1.max.x < box2.min.x) return false;
10     if (box1.min.y > box2.max.y) return false;
11     if (box1.max.y < box2.min.y) return false;
12     if (box1.min.z > box2.max.z) return false;
13     if (box1.max.z < box2.min.z) return false;
14   
15     // We have overlap.  Compute AABB of intersection, if they want it.
16     if (boxIntersect != NULL)
17     {
18         boxIntersect->min.x = max(box1.min.x, box2.min.x);
19         boxIntersect->max.x = min(box1.max.x, box2.max.x);
20         boxIntersect->min.y = max(box1.min.y, box2.min.y);
21         boxIntersect->max.y = min(box1.max.y, box2.max.y);
22         boxIntersect->min.z = max(box1.min.z, box2.min.z);
23         boxIntersect->max.z = min(box1.max.z, box2.max.z);
24     }
25   
26     return true;
27

posted on 2011-02-19 13:13  jiahuafu  阅读(232)  评论(0编辑  收藏  举报

导航