111 int axis_dir,
unsigned char & flags);
125 void Build_Tree_Recursive(AABTreeBuilderClass::CullNodeStruct * node,
int &curpolyindex);
127 void Update_Bounding_Boxes(
void);
138 struct CullNodeStruct
147 inline bool Is_Leaf(
void);
149 inline int Get_Back_Child(
void);
150 inline int Get_Front_Child(
void);
151 inline int Get_Poly0(
void);
152 inline int Get_Poly_Count(
void);
155 inline void Set_Front_Child(
uint32 index);
156 inline void Set_Back_Child(
uint32 index);
157 inline void Set_Poly0(
uint32 index);
158 inline void Set_Poly_Count(
uint32 count);
165 struct OBBoxAPTContextStruct
167 OBBoxAPTContextStruct(
const OBBoxClass & box,SimpleDynVecClass<uint32> & apt) :
172 SimpleDynVecClass<uint32> & APT;
179 struct OBBoxRayAPTContextStruct
181 OBBoxRayAPTContextStruct(
const OBBoxClass & box,
const Vector3 & viewdir,SimpleDynVecClass<uint32> & apt) :
189 SimpleDynVecClass<uint32> & APT;
192 void Generate_OBBox_APT_Recursive(CullNodeStruct * node,OBBoxAPTContextStruct & context);
193 void Generate_OBBox_APT_Recursive(CullNodeStruct * node, OBBoxRayAPTContextStruct & context);
195 bool Cast_Ray_Recursive(CullNodeStruct * node,RayCollisionTestClass & raytest);
196 int Cast_Semi_Infinite_Axis_Aligned_Ray_Recursive(CullNodeStruct * node,
const Vector3 & start_point,
197 int axis_r,
int axis_1,
int axis_2,
int direction,
unsigned char & flags);
198 bool Cast_AABox_Recursive(CullNodeStruct * node,AABoxCollisionTestClass & boxtest);
199 bool Cast_OBBox_Recursive(CullNodeStruct * node,OBBoxCollisionTestClass & boxtest);
200 bool Intersect_OBBox_Recursive(CullNodeStruct * node,OBBoxIntersectionTestClass & boxtest);
202 bool Cast_Ray_To_Polys(CullNodeStruct * node,RayCollisionTestClass & raytest);
203 int Cast_Semi_Infinite_Axis_Aligned_Ray_To_Polys(CullNodeStruct * node,
const Vector3 & start_point,
204 int axis_r,
int axis_1,
int axis_2,
int direction,
unsigned char & flags);
205 bool Cast_AABox_To_Polys(CullNodeStruct * node,AABoxCollisionTestClass & boxtest);
206 bool Cast_OBBox_To_Polys(CullNodeStruct * node,OBBoxCollisionTestClass & boxtest);
207 bool Intersect_OBBox_With_Polys(CullNodeStruct * node,OBBoxIntersectionTestClass & boxtest);
209 void Update_Bounding_Boxes_Recursive(CullNodeStruct * node);
212 CullNodeStruct * Nodes;
238 int axis_dir,
unsigned char & flags)
246 static const int axis_r[6] = { 0, 0, 1, 1, 2, 2 };
247 static const int axis_1[6] = { 1, 1, 2, 2, 0, 0 };
248 static const int axis_2[6] = { 2, 2, 0, 0, 1, 1 };
249 static const int direction[6] = { 1, 0, 1, 0, 1, 0 };
258 return Cast_Semi_Infinite_Axis_Aligned_Ray_Recursive(&(Nodes[0]), start_point,
259 axis_r[axis_dir], axis_1[axis_dir], axis_2[axis_dir], direction[axis_dir], flags);