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]);