41 :m_overlappingPairs(pairCache),
42 m_optimizedAabbTree(0),
43 m_ownsPairCache(false),
55 virtual ~btMultiSapOverlapFilterCallback()
70 void* mem =
btAlignedAlloc(
sizeof(btMultiSapOverlapFilterCallback),16);
116 setAabb(proxy,aabbMin,aabbMax,dispatcher);
190 :m_multiSap(multiSap),
191 m_multiProxy(multiProxy),
192 m_dispatcher(dispatcher)
197 virtual void processNode(
int ,
int broadphaseIndex)
201 int containingBroadphaseIndex = -1;
206 if (m_multiProxy->
m_bridgeProxies[i]->m_childBroadphase == childBroadphase)
208 containingBroadphaseIndex = i;
212 if (containingBroadphaseIndex<0)
222 MyNodeOverlapCallback myNodeCallback(
this,multiProxy,dispatcher);
235 multiProxy->
m_bridgeProxies[i]->m_childBroadphase->getBroadphaseAabb(worldAabbMin,worldAabbMax);
237 if (!overlapsBroadphase)
351 return aProxy0 > bProxy0 ||
352 (aProxy0 == bProxy0 && aProxy1 > bProxy1) ||
388 for (i=0;i<overlappingPairArray.
size();i++)
398 bool isDuplicate = (aProxy0 == bProxy0) && (aProxy1 == bProxy1);
402 bool needsRemoval =
false;
410 needsRemoval =
false;
438 #define CLEAN_INVALID_PAIRS 1 439 #ifdef CLEAN_INVALID_PAIRS 447 #endif//CLEAN_INVALID_PAIRS 462 multiSapProxy1->m_aabbMin,multiSapProxy1->m_aabbMax);
int m_escapeIndexOrTriangleIndex
void * m_multiSapParentProxy
QuantizedNodeArray & getLeafNodeArray()
void push_back(const T &_Val)
void setQuantizationValues(const btVector3 &bvhAabbMin, const btVector3 &bvhAabbMax, btScalar quantizationMargin=btScalar(1.0))
***************************************** expert/internal use only ************************* ...
void reportAabbOverlappingNodex(btNodeOverlapCallback *nodeCallback, const btVector3 &aabbMin, const btVector3 &aabbMax) const
***************************************** expert/internal use only ************************* ...
virtual void cleanOverlappingPair(btBroadphasePair &pair, btDispatcher *dispatcher)=0
int gOverlappingPairs
btSapBroadphaseArray m_sapBroadphases;
class btQuantizedBvh * m_optimizedAabbTree
btOverlappingPairCache * m_overlappingPairs
void buildInternal()
buildInternal is expert use only: assumes that setQuantizationValues and LeafNodeArray are initialize...
short int m_collisionFilterGroup
The btMultiSapBroadphase is a research project, not recommended to use in production.
virtual void setOverlapFilterCallback(btOverlapFilterCallback *callback)=0
const btScalar & getY() const
Return the y value.
virtual ~btMultiSapBroadphase()
bool TestAabbAgainstAabb2(const btVector3 &aabbMin1, const btVector3 &aabbMax1, const btVector3 &aabbMin2, const btVector3 &aabbMax2)
conservative test for overlap between two aabbs
The btOverlappingPairCache provides an interface for overlapping pair management (add, remove, storage), used by the btBroadphaseInterface broadphases.
btBroadphaseProxy * m_childProxy
const btScalar & getZ() const
Return the z value.
#define MAX_NUM_PARTS_IN_BITS
virtual btBroadphasePairArray & getOverlappingPairArray()=0
virtual void printStats()
virtual void resetPool(btDispatcher *dispatcher)
reset broadphase internal structures, to ensure determinism/reproducability
btOverlapFilterCallback * m_filterCallback
bool testAabbOverlap(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1)
virtual btBroadphaseProxy * createProxy(const btVector3 &aabbMin, const btVector3 &aabbMax, int shapeType, void *userPtr, short int collisionFilterGroup, short int collisionFilterMask, btDispatcher *dispatcher, void *multiSapProxy)=0
#define btAlignedFree(ptr)
void addToChildBroadphase(btMultiSapProxy *parentMultiSapProxy, btBroadphaseProxy *childProxy, btBroadphaseInterface *childBroadphase)
btSapBroadphaseArray & getBroadphaseArray()
btSortedOverlappingPairCache maintains the objects with overlapping AABB Typically managed by the Bro...
virtual btOverlappingPairCache * getOverlappingPairCache()
virtual btBroadphaseProxy * createProxy(const btVector3 &aabbMin, const btVector3 &aabbMax, int shapeType, void *userPtr, short int collisionFilterGroup, short int collisionFilterMask, btDispatcher *dispatcher, void *multiSapProxy)
virtual void getAabb(btBroadphaseProxy *proxy, btVector3 &aabbMin, btVector3 &aabbMax) const
btMultiSapBroadphase(int maxProxies=16384, btOverlappingPairCache *pairCache=0)
The btBroadphaseInterface class provides an interface to detect aabb-overlapping object pairs...
btQuantizedBvhNode is a compressed aabb node, 16 bytes.
virtual ~btOverlappingPairCache()
The btBroadphaseProxy is the main class that can be used with the Bullet broadphases.
btBroadphaseProxy * m_pProxy1
btCollisionAlgorithm * m_algorithm
btVector3 can be used to represent 3D points and vectors.
virtual bool process(const btBroadphaseProxy *proxy)=0
int size() const
return the number of elements in the array
btBroadphaseProxy * m_pProxy0
btSapBroadphaseArray m_sapBroadphases
btAlignedObjectArray< btMultiSapProxy * > m_multiSapProxies
btBroadphaseInterface * m_childBroadphase
void resize(int newsize, const T &fillData=T())
btAlignedObjectArray< btBridgeProxy * > m_bridgeProxies
array with all the entries that this proxy belongs to
The btQuantizedBvh class stores an AABB tree that can be quickly traversed on CPU and Cell SPU...
unsigned short int m_quantizedAabbMin[3]
bool boxIsContainedWithinBox(const btVector3 &amin, const btVector3 &amax, const btVector3 &bmin, const btVector3 &bmax)
virtual void setAabb(btBroadphaseProxy *proxy, const btVector3 &aabbMin, const btVector3 &aabbMax, btDispatcher *dispatcher)
virtual void setAabb(btBroadphaseProxy *proxy, const btVector3 &aabbMin, const btVector3 &aabbMax, btDispatcher *dispatcher)=0
#define btAlignedAlloc(size, alignment)
short int m_collisionFilterMask
unsigned short int m_quantizedAabbMax[3]
virtual void destroyProxy(btBroadphaseProxy *proxy, btDispatcher *dispatcher)
void quantize(unsigned short *out, const btVector3 &point, int isMax) const
virtual void rayTest(const btVector3 &rayFrom, const btVector3 &rayTo, btBroadphaseRayCallback &rayCallback, const btVector3 &aabbMin=btVector3(0, 0, 0), const btVector3 &aabbMax=btVector3(0, 0, 0))
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
void buildTree(const btVector3 &bvhAabbMin, const btVector3 &bvhAabbMax)
virtual void destroyProxy(btBroadphaseProxy *proxy, btDispatcher *dispatcher)=0
const btScalar & getX() const
Return the x value.
virtual void calculateOverlappingPairs(btDispatcher *dispatcher)
calculateOverlappingPairs is optional: incremental algorithms (sweep and prune) might do it during th...
void quickSort(const L &CompareFunc)
The btBroadphasePair class contains a pair of aabb-overlapping objects.