Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef BT_CONVEX_PLANE_COLLISION_ALGORITHM_H
00017 #define BT_CONVEX_PLANE_COLLISION_ALGORITHM_H
00018
00019 #include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
00020 #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
00021 #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
00022 class btPersistentManifold;
00023 #include "btCollisionDispatcher.h"
00024
00025 #include "LinearMath/btVector3.h"
00026
00029 class btConvexPlaneCollisionAlgorithm : public btCollisionAlgorithm
00030 {
00031 bool m_ownManifold;
00032 btPersistentManifold* m_manifoldPtr;
00033 bool m_isSwapped;
00034 int m_numPerturbationIterations;
00035 int m_minimumPointsPerturbationThreshold;
00036
00037 public:
00038
00039 btConvexPlaneCollisionAlgorithm(btPersistentManifold* mf,const btCollisionAlgorithmConstructionInfo& ci,btCollisionObject* col0,btCollisionObject* col1, bool isSwapped, int numPerturbationIterations,int minimumPointsPerturbationThreshold);
00040
00041 virtual ~btConvexPlaneCollisionAlgorithm();
00042
00043 virtual void processCollision (btCollisionObject* body0,btCollisionObject* body1,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut);
00044
00045 void collideSingleContact (const btQuaternion& perturbeRot, btCollisionObject* body0,btCollisionObject* body1,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut);
00046
00047 virtual btScalar calculateTimeOfImpact(btCollisionObject* body0,btCollisionObject* body1,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut);
00048
00049 virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
00050 {
00051 if (m_manifoldPtr && m_ownManifold)
00052 {
00053 manifoldArray.push_back(m_manifoldPtr);
00054 }
00055 }
00056
00057 struct CreateFunc :public btCollisionAlgorithmCreateFunc
00058 {
00059 int m_numPerturbationIterations;
00060 int m_minimumPointsPerturbationThreshold;
00061
00062 CreateFunc()
00063 : m_numPerturbationIterations(1),
00064 m_minimumPointsPerturbationThreshold(0)
00065 {
00066 }
00067
00068 virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, btCollisionObject* body0,btCollisionObject* body1)
00069 {
00070 void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvexPlaneCollisionAlgorithm));
00071 if (!m_swapped)
00072 {
00073 return new(mem) btConvexPlaneCollisionAlgorithm(0,ci,body0,body1,false,m_numPerturbationIterations,m_minimumPointsPerturbationThreshold);
00074 } else
00075 {
00076 return new(mem) btConvexPlaneCollisionAlgorithm(0,ci,body0,body1,true,m_numPerturbationIterations,m_minimumPointsPerturbationThreshold);
00077 }
00078 }
00079 };
00080
00081 };
00082
00083 #endif //BT_CONVEX_PLANE_COLLISION_ALGORITHM_H
00084