From 58f2747acfba3d0b04876510ed10254bf53ee77c Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Sat, 20 Sep 2008 22:33:36 +0000 Subject: [PATCH] fixed and re-enabled sphere-sphere collision: contact points were not properly removed/refreshed. --- .../btDefaultCollisionConfiguration.cpp | 5 ++--- .../btSphereSphereCollisionAlgorithm.cpp | 11 +++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp b/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp index aa9b54a02..1c3170805 100644 --- a/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp +++ b/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp @@ -216,12 +216,11 @@ btCollisionAlgorithmCreateFunc* btDefaultCollisionConfiguration::getCollisionAlg -#ifdef USE_BUGGY_SPHERE_BOX_ALGORITHM if ((proxyType0 == SPHERE_SHAPE_PROXYTYPE) && (proxyType1==SPHERE_SHAPE_PROXYTYPE)) { - //return m_sphereSphereCF; + return m_sphereSphereCF; } - +#ifdef USE_BUGGY_SPHERE_BOX_ALGORITHM if ((proxyType0 == SPHERE_SHAPE_PROXYTYPE) && (proxyType1==BOX_SHAPE_PROXYTYPE)) { return m_sphereBoxCF; diff --git a/src/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp b/src/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp index 4fb93b6fd..0c003a0c8 100644 --- a/src/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp +++ b/src/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp @@ -56,11 +56,16 @@ void btSphereSphereCollisionAlgorithm::processCollision (btCollisionObject* col0 btScalar radius0 = sphere0->getRadius(); btScalar radius1 = sphere1->getRadius(); - //m_manifoldPtr->clearManifold(); //don't do this, it disables warmstarting +#ifdef CLEAR_MANIFOLD + m_manifoldPtr->clearManifold(); //don't do this, it disables warmstarting +#endif ///iff distance positive, don't generate a new contact if ( len > (radius0+radius1)) { +#ifndef CLEAR_MANIFOLD + resultOut->refreshContactPoints(); +#endif //CLEAR_MANIFOLD return; } ///distance (negative means penetration) @@ -82,7 +87,9 @@ void btSphereSphereCollisionAlgorithm::processCollision (btCollisionObject* col0 resultOut->addContactPoint(normalOnSurfaceB,pos1,dist); - //no resultOut->refreshContactPoints(); needed, because of clearManifold (all points are new) +#ifndef CLEAR_MANIFOLD + resultOut->refreshContactPoints(); +#endif //CLEAR_MANIFOLD }