[Algorithms] OBBs
Brought to you by:
vexxed72
From: <Nik...@ao...> - 2000-07-21 02:39:53
|
I recently finished writing a collision detection system for my engine (using OBBs); however I have been having trouble with the system not always detecting collisions. I tested all of the functions separately to confirm their accuracy; yet this brought no avail. I decided to work backwards to find the bug, and I used a function from the RAPID library which tests for disjointedness between two boxes. Here is the description of the function: This is a test between two boxes, box A and box B. It is assumed that the coordinate system is aligned and centered on box A. The 3x3 matrix B specifies box B's orientation with respect to box A. Specifically, the columns of B are the basis vectors (axis vectors) of box B. The center of box B is located at the vector T. The dimensions of box B are given in the array b. The orientation and placement of box A, in this coordinate system, are the identity matrix and zero vector, respectively, so they need not be specified. The dimensions of box A are given in array a. obb_disjoint(double B[3][3], double T[3], double a[3], double b[3]); I set up a situation in Max using two boxes, in which the collision detection failed, and I then entered the box data in by hand. The result was that after putting box 2 in box 1's coordinate system, the matrix B was a 128 degree rotation around the Z axis (or Max's Y axis). The location of box 2 in relation to box 1 was: T[0]= -5.853f; T[1]= -2.173f; T[2]= 3.842f; And the dimensions (half-lengths) were: Bd[0]= 2; Bd[1]= 4; Bd[2]= 4.5; Ad[0]= 4; Ad[1]= 1; Ad[2]= 7.5; If you set this situation up in Max, it is obvious that the two boxes intersect (make sure to switch the Y & Z coordinates because of the difference in D3D and Max's CS, and multiply the half-lengths by 2 to get the actual dimensions). Yet, RAPID's function reports that the boxes are disjoint. Any help would be appreciated. Thanks, Nik...@ao... |