Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
OPC_TriBoxOverlap.h File Reference

Go to the source code of this file.

Macros

#define FINDMINMAX(x0, x1, x2, min, max)
 This macro quickly finds the min & max values among 3 variables. More...
 
#define AXISTEST_X01(a, b, fa, fb)
 TO BE DOCUMENTED. More...
 
#define AXISTEST_X2(a, b, fa, fb)
 TO BE DOCUMENTED. More...
 
#define AXISTEST_Y02(a, b, fa, fb)
 TO BE DOCUMENTED. More...
 
#define AXISTEST_Y1(a, b, fa, fb)
 TO BE DOCUMENTED. More...
 
#define AXISTEST_Z12(a, b, fa, fb)
 TO BE DOCUMENTED. More...
 
#define AXISTEST_Z0(a, b, fa, fb)
 TO BE DOCUMENTED. More...
 
#define IMPLEMENT_CLASS3_TESTS
 

Functions

inline_ bool planeBoxOverlap (const Point &normal, const float d, const Point &maxbox)
 TO BE DOCUMENTED. More...
 

Macro Definition Documentation

#define AXISTEST_X01 (   a,
  b,
  fa,
  fb 
)
Value:
min = a*v0.y - b*v0.z; \
max = a*v2.y - b*v2.z; \
if(min>max) {const float tmp=max; max=min; min=tmp; } \
rad = fa * extents.y + fb * extents.z; \
if(min>rad || max<-rad) return FALSE;

TO BE DOCUMENTED.

Definition at line 26 of file OPC_TriBoxOverlap.h.

#define AXISTEST_X2 (   a,
  b,
  fa,
  fb 
)
Value:
min = a*v0.y - b*v0.z; \
max = a*v1.y - b*v1.z; \
if(min>max) {const float tmp=max; max=min; min=tmp; } \
rad = fa * extents.y + fb * extents.z; \
if(min>rad || max<-rad) return FALSE;

TO BE DOCUMENTED.

Definition at line 34 of file OPC_TriBoxOverlap.h.

#define AXISTEST_Y02 (   a,
  b,
  fa,
  fb 
)
Value:
min = b*v0.z - a*v0.x; \
max = b*v2.z - a*v2.x; \
if(min>max) {const float tmp=max; max=min; min=tmp; } \
rad = fa * extents.x + fb * extents.z; \
if(min>rad || max<-rad) return FALSE;

TO BE DOCUMENTED.

Definition at line 42 of file OPC_TriBoxOverlap.h.

#define AXISTEST_Y1 (   a,
  b,
  fa,
  fb 
)
Value:
min = b*v0.z - a*v0.x; \
max = b*v1.z - a*v1.x; \
if(min>max) {const float tmp=max; max=min; min=tmp; } \
rad = fa * extents.x + fb * extents.z; \
if(min>rad || max<-rad) return FALSE;

TO BE DOCUMENTED.

Definition at line 50 of file OPC_TriBoxOverlap.h.

#define AXISTEST_Z0 (   a,
  b,
  fa,
  fb 
)
Value:
min = a*v0.x - b*v0.y; \
max = a*v1.x - b*v1.y; \
if(min>max) {const float tmp=max; max=min; min=tmp; } \
rad = fa * extents.x + fb * extents.y; \
if(min>rad || max<-rad) return FALSE;

TO BE DOCUMENTED.

Definition at line 66 of file OPC_TriBoxOverlap.h.

#define AXISTEST_Z12 (   a,
  b,
  fa,
  fb 
)
Value:
min = a*v1.x - b*v1.y; \
max = a*v2.x - b*v2.y; \
if(min>max) {const float tmp=max; max=min; min=tmp; } \
rad = fa * extents.x + fb * extents.y; \
if(min>rad || max<-rad) return FALSE;

TO BE DOCUMENTED.

Definition at line 58 of file OPC_TriBoxOverlap.h.

#define FINDMINMAX (   x0,
  x1,
  x2,
  min,
  max 
)
Value:
min = max = x0; \
if(x1<min) min=x1; \
if(x1>max) max=x1; \
if(x2<min) min=x2; \
if(x2>max) max=x2;

This macro quickly finds the min & max values among 3 variables.

Definition at line 3 of file OPC_TriBoxOverlap.h.

Referenced by AABBCollider::TriBoxOverlap(), and OBBCollider::TriBoxOverlap().

#define IMPLEMENT_CLASS3_TESTS
Value:
float rad; \
float min, max; \
\
const float fey0 = fabsf(e0.y); \
const float fez0 = fabsf(e0.z); \
AXISTEST_X01(e0.z, e0.y, fez0, fey0); \
const float fex0 = fabsf(e0.x); \
AXISTEST_Y02(e0.z, e0.x, fez0, fex0); \
AXISTEST_Z12(e0.y, e0.x, fey0, fex0); \
\
const float fey1 = fabsf(e1.y); \
const float fez1 = fabsf(e1.z); \
AXISTEST_X01(e1.z, e1.y, fez1, fey1); \
const float fex1 = fabsf(e1.x); \
AXISTEST_Y02(e1.z, e1.x, fez1, fex1); \
AXISTEST_Z0(e1.y, e1.x, fey1, fex1); \
\
const Point e2 = mLeafVerts[0] - mLeafVerts[2]; \
const float fey2 = fabsf(e2.y); \
const float fez2 = fabsf(e2.z); \
AXISTEST_X2(e2.z, e2.y, fez2, fey2); \
const float fex2 = fabsf(e2.x); \
AXISTEST_Y1(e2.z, e2.x, fez2, fex2); \
AXISTEST_Z12(e2.y, e2.x, fey2, fex2);

Definition at line 78 of file OPC_TriBoxOverlap.h.

Referenced by AABBCollider::TriBoxOverlap(), and OBBCollider::TriBoxOverlap().

Function Documentation

inline_ bool planeBoxOverlap ( const Point normal,
const float  d,
const Point maxbox 
)

TO BE DOCUMENTED.

Definition at line 11 of file OPC_TriBoxOverlap.h.

References f, FALSE, q, and TRUE.

Referenced by AABBCollider::TriBoxOverlap(), and OBBCollider::TriBoxOverlap().

12 {
13  Point vmin, vmax;
14  for(udword q=0;q<=2;q++)
15  {
16  if(normal[q]>0.0f) { vmin[q]=-maxbox[q]; vmax[q]=maxbox[q]; }
17  else { vmin[q]=maxbox[q]; vmax[q]=-maxbox[q]; }
18  }
19  if((normal|vmin)+d>0.0f) return FALSE;
20  if((normal|vmax)+d>=0.0f) return TRUE;
21 
22  return FALSE;
23 }