00001
00010 #ifndef H_COLDET
00011 #define H_COLDET
00012
00013 #ifndef EXPORT
00014 #define EXPORT
00015 #endif
00016
00026 class CollisionModel3D
00027 {
00028 public:
00029 virtual ~CollisionModel3D() {}
00030
00033 virtual void setTriangleNumber(int num) = 0;
00034
00037 virtual void addTriangle(float x1, float y1, float z1,
00038 float x2, float y2, float z2,
00039 float x3, float y3, float z3) = 0;
00040 virtual void addTriangle(float v1[3], float v2[3], float v3[3]) = 0;
00041
00043 virtual void finalize() = 0;
00044
00047 virtual void setTransform(float m[16]) = 0;
00048
00063 virtual bool collision(CollisionModel3D* other,
00064 int AccuracyDepth=-1,
00065 int MaxProcessingTime=0,
00066 float* other_transform=0) = 0;
00067
00079 virtual bool rayCollision(float origin[3],
00080 float direction[3],
00081 bool closest=false,
00082 float segmin=0.0f,
00083 float segmax=3.4e+38F) = 0;
00084
00089 virtual bool sphereCollision(float origin[3],
00090 float radius) = 0;
00091
00100 virtual bool getCollidingTriangles(float t1[9], float t2[9], bool ModelSpace=true) = 0;
00101
00106 virtual bool getCollidingTriangles(int& t1, int& t2) = 0;
00107
00115 virtual bool getCollisionPoint(float p[3], bool ModelSpace=true) = 0;
00116 };
00117
00121 class TimeoutExpired {};
00122
00128 class Inconsistency {};
00129
00137 EXPORT CollisionModel3D* newCollisionModel3D(bool Static=false);
00138
00139
00140
00142
00144
00150 bool SphereRayCollision(float center[3], float radius,
00151 float origin[3], float direction[3],
00152 float point[3]);
00153
00155 bool SphereSphereCollision(float c1[3], float r1,
00156 float c2[3], float r2);
00157
00158
00159
00160 #endif // H_COLDET