00001 #ifndef __SSV_TREE_COLLIDER_H__ 00002 #define __SSV_TREE_COLLIDER_H__ 00003 00004 #include "config.h" 00005 #include "Opcode/Opcode.h" 00006 00007 using namespace Opcode; 00008 00012 class HRP_COLLISION_EXPORT SSVTreeCollider : public AABBTreeCollider { 00013 public: 00017 SSVTreeCollider(); 00018 00022 ~SSVTreeCollider(){}; 00023 00034 bool Distance(BVTCache& cache, float& minD, Point &point0, Point&point1, 00035 const Matrix4x4* world0=null, const Matrix4x4* world1=null); 00036 00045 bool Collide(BVTCache& cache, double tolerance, 00046 const Matrix4x4* world0=null, const Matrix4x4* world1=null); 00047 00048 protected: 00055 float SsvSsvDist(const AABBCollisionNode* b0, const AABBCollisionNode *b1); 00056 00065 float PrimDist(udword id0, udword id1, Point& point0, Point& point1); 00066 00067 private: 00068 void Distance(const AABBCollisionTree* tree0, 00069 const AABBCollisionTree* tree1, 00070 const Matrix4x4* world0, const Matrix4x4* world1, 00071 Pair* cache, float& minD, Point &point0, Point&point1); 00072 00073 void _Distance(const AABBCollisionNode* b0, const AABBCollisionNode* b1, 00074 float& minD, Point& point0, Point& point1); 00075 bool Collide(const AABBCollisionTree* tree0, 00076 const AABBCollisionTree* tree1, 00077 const Matrix4x4* world0, const Matrix4x4* world1, 00078 Pair* cache, double tolerance); 00079 00080 bool _Collide(const AABBCollisionNode* b0, const AABBCollisionNode* b1, 00081 double tolerance); 00090 float PssPssDist(float r0, const Point& center0, float r1, const Point& center1); 00091 00101 float PssLssDist(float r0, const Point& center0, 00102 float r1, const Point& point0, const Point& point1); 00103 00113 float LssPssDist(float r0, const Point& point0, const Point& point1, 00114 float r1, const Point& center0); 00115 00126 float LssLssDist(float r0, const Point& point0, const Point& point1, 00127 float r1, const Point& point2, const Point& point3); 00128 }; 00129 00130 #endif