Latest ArticlesEngine Architecture #1
Static Shadows #1
Paint on Mesh
A Tale of the Internet
Bounding Boxes Jun 01, 2006
Bounding Box TypesThis article gives an overview of oriented bounding boxes, including source code. An oriented box is allowed to rotate freely, unlike a axis-aligned bounding box, which always remains aligned to the x,y, and z axes. Tests with oriented bounding boxes are more complicated, and thus slower, but they're also more accurate. I could also mention that spheres can be used as the least accurate bounding type, but I won't since I put Box Types in the section title =)
Data StructureTo store the box, we need to store a centerpoint, a rotation, and how far the box extends from the centerpoint in the x,y,z directions. I use a 4x4 matrix to store the rotation and centerpoint translation, and a vector for the Extents. I just chose to use a 4x4 matrix for simplicity so I could use the matrix class. An alternative to storing extents and a centerpoint is storing the minimum corner and maximum corner, so I have a set function that converts from this format.
FunctionsThis class contains the following functions:
IsPointInBox: Tests if a point is in the box.
Code Downloadbbox.h( 2KB ), bbox.cpp ( 5KB ) : An oriented bounding box class. The code uses the matrix and vector classes from earlier articles, although a needed function or two might be missing. The code is commented enough to give a general idea of how the class and algorithms used work. (I've updated the BoxOutsidePlane function with a more sensible one.)
External LinkA while after I had first written a bounding box class, I found this article which inspired some code changes. It also goes into much more detail than I did here.