Graphics Reference
In-Depth Information
Table 4.1 The 15 separating axis tests needed to determine OBB-OBB intersection. Super-
scripts indicate which OBB the value comes from.
L
| T · L |
r A
r B
u 0
e 0
e 0 |
e 1 |
e 2 |
|
t 0 |
r 00 | +
r 01 | +
r 02 |
u 1
e 1
e 0 |
e 1 |
e 2 |
| t 1 |
r 10 | +
r 11 | +
r 12 |
u 2
e 2
e 0 |
e 1 |
e 2 |
|
t 2 |
r 20 | +
r 21 | +
r 22 |
u 0
e 0 |
e 1 |
e 2 |
e 0
|
t 0 r 00 +
t 1 r 10 +
t 2 r 20 |
r 00 | +
r 10 | +
r 20 |
u 1
|
t 2 r 21 |
e 0 |
r 01 | +
e 1 |
r 11 | +
e 2 |
r 21 |
e 1
t 0 r 01 +
t 1 r 11 +
u 2
e 0 |
e 1 |
e 2 |
e 2
|
t 0 r 02 +
t 1 r 12 +
t 2 r 22 |
r 02 | +
r 12 | +
r 22 |
u 0
u 0
e 1 |
e 2 |
e 1 |
e 2 |
×
|
|
| +
|
| +
|
t 2 r 10
t 1 r 20
r 20
r 10
r 02
r 01
u 0
u 1
e 1 |
e 2 |
e 0 |
e 2 |
×
|
t 2 r 11
t 1 r 21 |
r 21 | +
r 11 |
r 02 | +
r 00 |
u 0
u 2
e 1 |
e 2 |
e 0 |
e 1 |
×
| t 2 r 12
t 1 r 22 |
r 22 | +
r 12 |
r 01 | +
r 00 |
u 1
u 0
e 0 |
e 2 |
e 1 |
e 2 |
×
|
t 0 r 20
t 2 r 00 |
r 20 | +
r 00 |
r 12 | +
r 11 |
u 1
u 1
e 0 |
e 2 |
e 0 |
e 2 |
×
|
t 0 r 21
t 2 r 01 |
r 21 | +
r 01 |
r 12 | +
r 10 |
u 1
u 2
|
t 2 r 02 |
e 0 |
r 22 | +
e 2 |
r 02 |
e 0 |
r 11 | +
e 1 |
r 10 |
×
t 0 r 22
u 2
u 0
e 0 |
e 1 |
e 1 |
e 2 |
×
|
t 1 r 00
t 0 r 10 |
r 10 | +
r 00 |
r 22 | +
r 21 |
u 2
u 1
e 0 |
e 1 |
e 0 |
e 2 |
×
|
|
| +
|
| +
|
t 1 r 01
t 0 r 11
r 11
r 01
r 22
r 20
u 2
u 2
e 0 |
e 1 |
e 0 |
e 1 |
×
|
t 1 r 02
t 0 r 12 |
r 12 | +
r 02 |
r 21 | +
r 20 |
matrix bringing B into A 's coordinate frame), the tests that must be performed for the
different axes L are summarized in Table 4.1.
This test can be implemented as follows:
int TestOBBOBB(OBB &a, OBB &b)
{
float ra, rb;
Matrix33 R, AbsR;
// Compute rotation matrix expressing b in a's coordinate frame
for(inti=0;i<3;i++)
for(intj=0;j<3;j++)
R[i][j] = Dot(a.u[i], b.u[j]);
 
Search WWH ::




Custom Search