diff options
author | Erwin Coumans <blender@erwincoumans.com> | 2006-11-21 03:03:56 +0300 |
---|---|---|
committer | Erwin Coumans <blender@erwincoumans.com> | 2006-11-21 03:03:56 +0300 |
commit | d58670ddd2e43c9ba6e56c766827165eb3ba08cb (patch) | |
tree | 96e85d2feeb35a9939297257ceccca9edd6f05b9 /extern/bullet2/src/BulletCollision/CollisionDispatch | |
parent | 731e7e3915f35de124ab65b455316e5fd3e60585 (diff) |
catch up with latest Bullet 2.x (not in use yet)
Diffstat (limited to 'extern/bullet2/src/BulletCollision/CollisionDispatch')
4 files changed, 30 insertions, 19 deletions
diff --git a/extern/bullet2/src/BulletCollision/CollisionDispatch/SphereTriangleDetector.h b/extern/bullet2/src/BulletCollision/CollisionDispatch/SphereTriangleDetector.h index 22262340222..8fedba19922 100644 --- a/extern/bullet2/src/BulletCollision/CollisionDispatch/SphereTriangleDetector.h +++ b/extern/bullet2/src/BulletCollision/CollisionDispatch/SphereTriangleDetector.h @@ -45,4 +45,5 @@ private: }; -#endif //SPHERE_TRIANGLE_DETECTOR_H
\ No newline at end of file +#endif //SPHERE_TRIANGLE_DETECTOR_H + diff --git a/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp b/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp index 7edd3e8abfe..775ed3e13d8 100644 --- a/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp +++ b/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp @@ -121,13 +121,13 @@ void btCollisionWorld::addCollisionObject(btCollisionObject* collisionObject,sho } -void btCollisionWorld::performDiscreteCollisionDetection() + + + +void btCollisionWorld::performDiscreteCollisionDetection(btDispatcherInfo& dispatchInfo) { BEGIN_PROFILE("performDiscreteCollisionDetection"); - btDispatcherInfo dispatchInfo; - dispatchInfo.m_timeStep = 0.f; - dispatchInfo.m_stepCount = 0; //update aabb (of all moved objects) diff --git a/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h b/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h index e2b8eb11238..e212e520bda 100644 --- a/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h +++ b/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h @@ -236,8 +236,8 @@ public: void removeCollisionObject(btCollisionObject* collisionObject); - virtual void performDiscreteCollisionDetection(); - + virtual void performDiscreteCollisionDetection( btDispatcherInfo& dispatchInfo); + }; diff --git a/extern/bullet2/src/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp b/extern/bullet2/src/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp index 36b0d15eac5..e896508bdb9 100644 --- a/extern/bullet2/src/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp +++ b/extern/bullet2/src/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp @@ -39,7 +39,9 @@ subject to the following restrictions: #include "BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h" -//#include "NarrowPhaseCollision/EpaPenetrationDepthSolver.h" +#include "BulletCollision/NarrowPhaseCollision/btGjkEpa.h" +#include "BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h" + #ifdef WIN32 #if _MSC_VER >= 1310 @@ -59,7 +61,7 @@ subject to the following restrictions: #endif //USE_HULL -bool gUseEpa = false; +bool gUseEpa = true; #ifdef WIN32 @@ -113,13 +115,10 @@ void btConvexConvexAlgorithm ::setLowLevelOfDetail(bool useLowLevel) +static btGjkEpaPenetrationDepthSolver gEpaPenetrationDepthSolver; static btMinkowskiPenetrationDepthSolver gPenetrationDepthSolver; -//static EpaPenetrationDepthSolver gEpaPenetrationDepthSolver; -#ifdef USE_EPA -Solid3EpaPenetrationDepth gSolidEpaPenetrationSolver; -#endif //USE_EPA void btConvexConvexAlgorithm::checkPenetrationDepthSolver() { @@ -128,10 +127,7 @@ void btConvexConvexAlgorithm::checkPenetrationDepthSolver() m_useEpa = gUseEpa; if (m_useEpa) { - - // m_gjkPairDetector.setPenetrationDepthSolver(&gEpaPenetrationDepthSolver); - - + m_gjkPairDetector.setPenetrationDepthSolver(&gEpaPenetrationDepthSolver); } else { m_gjkPairDetector.setPenetrationDepthSolver(&gPenetrationDepthSolver); @@ -153,8 +149,21 @@ void btConvexConvexAlgorithm ::processCollision (btCollisionObject* body0,btColl m_manifoldPtr = m_dispatcher->getNewManifold(body0,body1); m_ownManifold = true; } + resultOut->setPersistentManifold(m_manifoldPtr); - +#ifdef USE_BT_GJKEPA + btConvexShape* shape0(static_cast<btConvexShape*>(body0->getCollisionShape())); + btConvexShape* shape1(static_cast<btConvexShape*>(body1->getCollisionShape())); + const btScalar radialmargin(0/*shape0->getMargin()+shape1->getMargin()*/); + btGjkEpaSolver::sResults results; + if(btGjkEpaSolver::Collide( shape0,body0->getWorldTransform(), + shape1,body1->getWorldTransform(), + radialmargin,results)) + { + dispatchInfo.m_debugDraw->drawLine(results.witnesses[1],results.witnesses[1]+results.normal,btVector3(255,0,0)); + resultOut->addContactPoint(results.normal,results.witnesses[1],-results.depth); + } +#else checkPenetrationDepthSolver(); btConvexShape* min0 = static_cast<btConvexShape*>(body0->getCollisionShape()); @@ -173,8 +182,8 @@ void btConvexConvexAlgorithm ::processCollision (btCollisionObject* body0,btColl input.m_transformA = body0->getWorldTransform(); input.m_transformB = body1->getWorldTransform(); - resultOut->setPersistentManifold(m_manifoldPtr); m_gjkPairDetector.getClosestPoints(input,*resultOut,dispatchInfo.m_debugDraw); +#endif } @@ -274,3 +283,4 @@ float btConvexConvexAlgorithm::calculateTimeOfImpact(btCollisionObject* col0,btC return resultFraction; } + |