From 7c0abad0416232a1d438d8293be17cf340857a75 Mon Sep 17 00:00:00 2001 From: ejcoumans Date: Fri, 3 Aug 2007 01:48:34 +0000 Subject: [PATCH] added aabb overlap check for multi SAP broadphase --- .../BroadphaseCollision/btMultiSapBroadphase.cpp | 16 +++++++++++++++- .../BroadphaseCollision/btMultiSapBroadphase.h | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp b/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp index 3939f66f6..a94fa861c 100644 --- a/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp +++ b/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp @@ -16,6 +16,7 @@ subject to the following restrictions: #include "btMultiSapBroadphase.h" #include "btSimpleBroadphase.h" +#include "LinearMath/btAabbUtil2.h" /// btSapBroadphaseArray m_sapBroadphases; @@ -84,6 +85,9 @@ void btMultiSapBroadphase::destroyProxy(btBroadphaseProxy* proxy) void btMultiSapBroadphase::setAabb(btBroadphaseProxy* proxy,const btVector3& aabbMin,const btVector3& aabbMax) { btMultiSapProxy* multiProxy = static_cast(proxy); + multiProxy->m_aabbMin = aabbMin; + multiProxy->m_aabbMax = aabbMax; + for (int i=0;im_childProxies.size();i++) { btChildProxy* childProxyRef = multiProxy->m_childProxies[i]; @@ -126,7 +130,7 @@ void btMultiSapBroadphase::calculateOverlappingPairs() if (!isDuplicate) { - bool hasOverlap = true;//testAabbOverlap(pair.m_pProxy0,pair.m_pProxy1); + bool hasOverlap = testAabbOverlap(pair.m_pProxy0,pair.m_pProxy1); if (hasOverlap) { @@ -170,3 +174,13 @@ void btMultiSapBroadphase::calculateOverlappingPairs() } + +bool btMultiSapBroadphase::testAabbOverlap(btBroadphaseProxy* childProxy0,btBroadphaseProxy* childProxy1) +{ + btMultiSapProxy* multiSapProxy0 = (btMultiSapProxy*)childProxy0->m_multiSapParentProxy; + btMultiSapProxy* multiSapProxy1 = (btMultiSapProxy*)childProxy1->m_multiSapParentProxy; + + return TestAabbAgainstAabb2(multiSapProxy0->m_aabbMin,multiSapProxy0->m_aabbMax, + multiSapProxy1->m_aabbMin,multiSapProxy1->m_aabbMax); + +} diff --git a/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h b/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h index e51d5e5d3..f7199248e 100644 --- a/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h +++ b/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h @@ -98,6 +98,8 @@ public: ///calculateOverlappingPairs is optional: incremental algorithms (sweep and prune) might do it during the set aabb virtual void calculateOverlappingPairs(); + bool testAabbOverlap(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1); + virtual btOverlappingPairCache* getOverlappingPairCache() { return m_overlappingPairs;