28#define USE_LOCAL_STACK 1
66 for (i=0;i<pairs.
size();i++)
68 if (pairs[i].m_userPointer)
81 int numChildren = pairs.
size();
83 for (i=0;i<numChildren;i++)
85 if (pairs[i].m_userPointer)
130 BT_PROFILE(
"btCompoundCompoundLeafCallback::Process");
143 btAssert(childIndex0<compoundShape0->getNumChildShapes());
146 btAssert(childIndex1<compoundShape1->getNumChildShapes());
154 btTransform newChildWorldTrans0 = orgTrans0*childTrans0 ;
158 btTransform newChildWorldTrans1 = orgTrans1*childTrans1 ;
162 btVector3 aabbMin0,aabbMax0,aabbMin1,aabbMax1;
163 childShape0->
getAabb(newChildWorldTrans0,aabbMin0,aabbMax0);
164 childShape1->
getAabb(newChildWorldTrans1,aabbMin1,aabbMax1);
168 aabbMin0 -= thresholdVec;
169 aabbMax0 += thresholdVec;
238 newmin -=
btVector3(distanceThreshold, distanceThreshold, distanceThreshold);
239 newmax +=
btVector3(distanceThreshold, distanceThreshold, distanceThreshold);
256#ifdef USE_LOCAL_STACK
270 treshold=stkStack.
size()-4;
317 if (!tree0 || !tree1)
339#ifdef USE_LOCAL_STACK
344 for (i=0;i<pairs.
size();i++)
346 if (pairs[i].m_userPointer)
390 btVector3 aabbMin0,aabbMax0,aabbMin1,aabbMax1;
392 for (i=0;i<pairs.
size();i++)
394 if (pairs[i].m_userPointer)
404 childShape0 = compoundShape0->
getChildShape(pairs[i].m_indexA);
408 newChildWorldTrans0 = orgTrans0*childTrans0 ;
409 childShape0->
getAabb(newChildWorldTrans0,aabbMin0,aabbMax0);
412 aabbMin0 -= thresholdVec;
413 aabbMax0 += thresholdVec;
420 childShape1 = compoundShape1->
getChildShape(pairs[i].m_indexB);
424 newChildWorldTrans1 = orgTrans1*childTrans1 ;
425 childShape1->
getAabb(newChildWorldTrans1,aabbMin1,aabbMax1);
428 aabbMin1 -= thresholdVec;
429 aabbMax1 += thresholdVec;
bool TestAabbAgainstAabb2(const btVector3 &aabbMin1, const btVector3 &aabbMax1, const btVector3 &aabbMin2, const btVector3 &aabbMax2)
conservative test for overlap between two aabbs
void btTransformAabb(const btVector3 &halfExtents, btScalar margin, const btTransform &t, btVector3 &aabbMinOut, btVector3 &aabbMaxOut)
#define btAlignedFree(ptr)
#define btAlignedAlloc(size, alignment)
bool(* btShapePairCallback)(const btCollisionShape *pShape0, const btCollisionShape *pShape1)
btShapePairCallback gCompoundCompoundChildShapePairCallback
static DBVT_INLINE bool MyIntersect(const btDbvtAabbMm &a, const btDbvtAabbMm &b, const btTransform &xform, btScalar distanceThreshold)
static void MycollideTT(const btDbvtNode *root0, const btDbvtNode *root1, const btTransform &xform, btCompoundCompoundLeafCallback *callback, btScalar distanceThreshold)
DBVT_INLINE bool Intersect(const btDbvtAabbMm &a, const btDbvtAabbMm &b)
@ BT_CLOSEST_POINT_ALGORITHMS
@ BT_CONTACT_POINT_ALGORITHMS
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
#define ATTRIBUTE_ALIGNED16(a)
int size() const
return the number of elements in the array
void resize(int newsize, const T &fillData=T())
void clear()
clear the array, deallocated memory. Generally it is better to use array.resize(0),...
void push_back(const T &_Val)
void initializeFromBuffer(void *buffer, int size, int capacity)
btCollisionAlgorithm is an collision interface that is compatible with the Broadphase and btDispatche...
btDispatcher * m_dispatcher
virtual void getAllContactManifolds(btManifoldArray &manifoldArray)=0
virtual void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)=0
virtual ~btCollisionAlgorithm()
btCollisionObject can be used to manage collision detection objects.
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
virtual void getAabb(const btTransform &t, btVector3 &aabbMin, btVector3 &aabbMax) const =0
getAabb returns the axis aligned bounding box in the coordinate frame of the given transform t.
btCompoundCollisionAlgorithm supports collision between CompoundCollisionShapes and other collision s...
virtual void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
class btPersistentManifold * m_sharedManifold
btManifoldArray manifoldArray
class btHashedSimplePairCache * m_childCollisionAlgorithmCache
int m_compoundShapeRevision0
virtual void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
btScalar calculateTimeOfImpact(btCollisionObject *body0, btCollisionObject *body1, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
int m_compoundShapeRevision1
btCompoundCompoundCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped)
virtual ~btCompoundCompoundCollisionAlgorithm()
virtual void getAllContactManifolds(btManifoldArray &manifoldArray)
btSimplePairArray m_removePairs
void removeChildAlgorithms()
The btCompoundShape allows to store multiple other btCollisionShapes This allows for moving concave c...
btCollisionShape * getChildShape(int index)
btTransform & getChildTransform(int index)
int getUpdateRevision() const
const btDbvt * getDynamicAabbTree() const
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
virtual void freeCollisionAlgorithm(void *ptr)=0
virtual btCollisionAlgorithm * findAlgorithm(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, btPersistentManifold *sharedManifold, ebtDispatcherQueryType queryType)=0
virtual ~btHashedSimplePairCache()
btSimplePairArray & getOverlappingPairArray()
btSimplePair * findPair(int indexA, int indexB)
virtual btSimplePair * addOverlappingPair(int indexA, int indexB)
virtual void * removeOverlappingPair(int indexA, int indexB)
btManifoldResult is a helper class to manage contact results.
virtual void setShapeIdentifiersA(int partId0, int index0)
setShapeIdentifiersA/B provides experimental support for per-triangle material / custom material comb...
void setBody0Wrap(const btCollisionObjectWrapper *obj0Wrap)
const btCollisionObjectWrapper * getBody1Wrap() const
void setBody1Wrap(const btCollisionObjectWrapper *obj1Wrap)
void setPersistentManifold(btPersistentManifold *manifoldPtr)
virtual void setShapeIdentifiersB(int partId1, int index1)
btScalar m_closestPointDistanceThreshold
void refreshContactPoints()
const btCollisionObjectWrapper * getBody0Wrap() const
btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping...
btVector3 can be used to represent 3D points and vectors.
const btCollisionShape * getCollisionShape() const
const btCollisionObject * getCollisionObject() const
const btTransform & getWorldTransform() const
btPersistentManifold * m_sharedManifold
void Process(const btDbvtNode *leaf0, const btDbvtNode *leaf1)
btDispatcher * m_dispatcher
const btCollisionObjectWrapper * m_compound0ColObjWrap
btCompoundCompoundLeafCallback(const btCollisionObjectWrapper *compound1ObjWrap, const btCollisionObjectWrapper *compound0ObjWrap, btDispatcher *dispatcher, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut, btHashedSimplePairCache *childAlgorithmsCache, btPersistentManifold *sharedManifold)
const btCollisionObjectWrapper * m_compound1ColObjWrap
class btHashedSimplePairCache * m_childCollisionAlgorithmCache
const btDispatcherInfo & m_dispatchInfo
btManifoldResult * m_resultOut
static btDbvtAabbMm FromMM(const btVector3 &mi, const btVector3 &mx)
DBVT_INLINE const btVector3 & Mins() const
DBVT_INLINE const btVector3 & Maxs() const
DBVT_INLINE bool isinternal() const
The btDbvt class implements a fast dynamic bounding volume tree based on axis aligned bounding boxes ...