From e31711a4d9ed1080e4256572db00095fc4e31b65 Mon Sep 17 00:00:00 2001 From: ejcoumans Date: Fri, 26 May 2006 20:25:18 +0000 Subject: [PATCH] try to catch a rare failure case (debugmode-printf) --- .../NarrowPhaseCollision/GjkPairDetector.cpp | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/Bullet/NarrowPhaseCollision/GjkPairDetector.cpp b/Bullet/NarrowPhaseCollision/GjkPairDetector.cpp index 9f20cb6d5..ced076581 100644 --- a/Bullet/NarrowPhaseCollision/GjkPairDetector.cpp +++ b/Bullet/NarrowPhaseCollision/GjkPairDetector.cpp @@ -23,7 +23,7 @@ SimdScalar rel_error2 = rel_error * rel_error; float maxdist2 = 1.e30f; -int maxIter=1000; +int gGjkMaxIter=1000; GjkPairDetector::GjkPairDetector(ConvexShape* objectA,ConvexShape* objectB,SimplexSolverInterface* simplexSolver,ConvexPenetrationDepthSolver* penetrationDepthSolver) :m_cachedSeparatingAxis(0.f,0.f,1.f), @@ -69,21 +69,22 @@ int curIter = 0; while (true) { - if (curIter++ > maxIter) -{ -#ifdef DEBUG -printf("GjkPairDetector maxIter exceeded:%i\n",curIter); -printf("sepAxis=(%f,%f,%f), squaredDistance = %f, shapeTypeA=%i,shapeTypeB=%i\n", -m_cachedSeparatingAxis.getX(), -m_cachedSeparatingAxis.getY(), -m_cachedSeparatingAxis.getZ(), -squaredDistance, -m_minkowskiA->GetShapeType(), -m_minkowskiB->GetShapeType()); -#endif -break; + //rare failure case, perhaps deferate shapes? + if (curIter++ > gGjkMaxIter) + { + #if defined(DEBUG) || defined (_DEBUG) + printf("GjkPairDetector maxIter exceeded:%i\n",curIter); + printf("sepAxis=(%f,%f,%f), squaredDistance = %f, shapeTypeA=%i,shapeTypeB=%i\n", + m_cachedSeparatingAxis.getX(), + m_cachedSeparatingAxis.getY(), + m_cachedSeparatingAxis.getZ(), + squaredDistance, + m_minkowskiA->GetShapeType(), + m_minkowskiB->GetShapeType()); + #endif + break; -} + } SimdVector3 seperatingAxisInA = (-m_cachedSeparatingAxis)* input.m_transformA.getBasis(); SimdVector3 seperatingAxisInB = m_cachedSeparatingAxis* input.m_transformB.getBasis();