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_CONCAVE_COLLISION_ALGORITHM_H
00017 #define BT_CONVEX_CONCAVE_COLLISION_ALGORITHM_H
00018
00019 #include "btActivatingCollisionAlgorithm.h"
00020 #include "BulletCollision/BroadphaseCollision/btDispatcher.h"
00021 #include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
00022 #include "BulletCollision/CollisionShapes/btTriangleCallback.h"
00023 #include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
00024 class btDispatcher;
00025 #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
00026 #include "btCollisionCreateFunc.h"
00027
00029 class btConvexTriangleCallback : public btTriangleCallback
00030 {
00031 const btCollisionObjectWrapper* m_convexBodyWrap;
00032 const btCollisionObjectWrapper* m_triBodyWrap;
00033
00034 btVector3 m_aabbMin;
00035 btVector3 m_aabbMax ;
00036
00037
00038 btManifoldResult* m_resultOut;
00039 btDispatcher* m_dispatcher;
00040 const btDispatcherInfo* m_dispatchInfoPtr;
00041 btScalar m_collisionMarginTriangle;
00042
00043 public:
00044 int m_triangleCount;
00045
00046 btPersistentManifold* m_manifoldPtr;
00047
00048 btConvexTriangleCallback(btDispatcher* dispatcher,const btCollisionObjectWrapper* body0Wrap,const btCollisionObjectWrapper* body1Wrap,bool isSwapped);
00049
00050 void setTimeStepAndCounters(btScalar collisionMarginTriangle,const btDispatcherInfo& dispatchInfo,const btCollisionObjectWrapper* convexBodyWrap, const btCollisionObjectWrapper* triBodyWrap, btManifoldResult* resultOut);
00051
00052 void clearWrapperData()
00053 {
00054 m_convexBodyWrap = 0;
00055 m_triBodyWrap = 0;
00056 }
00057 virtual ~btConvexTriangleCallback();
00058
00059 virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex);
00060
00061 void clearCache();
00062
00063 SIMD_FORCE_INLINE const btVector3& getAabbMin() const
00064 {
00065 return m_aabbMin;
00066 }
00067 SIMD_FORCE_INLINE const btVector3& getAabbMax() const
00068 {
00069 return m_aabbMax;
00070 }
00071
00072 };
00073
00074
00075
00076
00078 class btConvexConcaveCollisionAlgorithm : public btActivatingCollisionAlgorithm
00079 {
00080
00081 bool m_isSwapped;
00082
00083 btConvexTriangleCallback m_btConvexTriangleCallback;
00084
00085
00086
00087 public:
00088
00089 btConvexConcaveCollisionAlgorithm( const btCollisionAlgorithmConstructionInfo& ci,const btCollisionObjectWrapper* body0Wrap,const btCollisionObjectWrapper* body1Wrap,bool isSwapped);
00090
00091 virtual ~btConvexConcaveCollisionAlgorithm();
00092
00093 virtual void processCollision (const btCollisionObjectWrapper* body0Wrap,const btCollisionObjectWrapper* body1Wrap,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut);
00094
00095 btScalar calculateTimeOfImpact(btCollisionObject* body0,btCollisionObject* body1,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut);
00096
00097 virtual void getAllContactManifolds(btManifoldArray& manifoldArray);
00098
00099 void clearCache();
00100
00101 struct CreateFunc :public btCollisionAlgorithmCreateFunc
00102 {
00103 virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap,const btCollisionObjectWrapper* body1Wrap)
00104 {
00105 void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvexConcaveCollisionAlgorithm));
00106 return new(mem) btConvexConcaveCollisionAlgorithm(ci,body0Wrap,body1Wrap,false);
00107 }
00108 };
00109
00110 struct SwappedCreateFunc :public btCollisionAlgorithmCreateFunc
00111 {
00112 virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap,const btCollisionObjectWrapper* body1Wrap)
00113 {
00114 void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvexConcaveCollisionAlgorithm));
00115 return new(mem) btConvexConcaveCollisionAlgorithm(ci,body0Wrap,body1Wrap,true);
00116 }
00117 };
00118
00119 };
00120
00121 #endif //BT_CONVEX_CONCAVE_COLLISION_ALGORITHM_H