Merge pull request #581 from erwincoumans/master
Use higher precision GJK/EPA collision tolerances in double precision mode. Fix Lua example
This commit is contained in:
@@ -34,7 +34,7 @@ namespace gjkepa2_impl2
|
||||
|
||||
/* GJK */
|
||||
#define GJK_MAX_ITERATIONS 128
|
||||
#define GJK_ACCURARY ((b3Scalar)0.0001)
|
||||
#define GJK_ACCURACY ((b3Scalar)0.0001)
|
||||
#define GJK_MIN_DISTANCE ((b3Scalar)0.0001)
|
||||
#define GJK_DUPLICATED_EPS ((b3Scalar)0.0001)
|
||||
#define GJK_SIMPLEX2_EPS ((b3Scalar)0.0)
|
||||
@@ -216,7 +216,7 @@ namespace gjkepa2_impl2
|
||||
/* Check for termination */
|
||||
const b3Scalar omega=b3Dot(m_ray,w)/rl;
|
||||
alpha=b3Max(omega,alpha);
|
||||
if(((rl-alpha)-(GJK_ACCURARY*rl))<=0)
|
||||
if(((rl-alpha)-(GJK_ACCURACY*rl))<=0)
|
||||
{/* Return old simplex */
|
||||
removevertice(m_simplices[m_current]);
|
||||
break;
|
||||
@@ -998,7 +998,7 @@ bool b3GjkEpaSolver2::SignedDistance(const btConvexShape* shape0,
|
||||
/* Symbols cleanup */
|
||||
|
||||
#undef GJK_MAX_ITERATIONS
|
||||
#undef GJK_ACCURARY
|
||||
#undef GJK_ACCURACY
|
||||
#undef GJK_MIN_DISTANCE
|
||||
#undef GJK_DUPLICATED_EPS
|
||||
#undef GJK_SIMPLEX2_EPS
|
||||
|
||||
@@ -41,21 +41,38 @@ namespace gjkepa2_impl
|
||||
|
||||
/* GJK */
|
||||
#define GJK_MAX_ITERATIONS 128
|
||||
#define GJK_ACCURARY ((btScalar)0.0001)
|
||||
#define GJK_MIN_DISTANCE ((btScalar)0.0001)
|
||||
#define GJK_DUPLICATED_EPS ((btScalar)0.0001)
|
||||
|
||||
#ifdef BT_USE_DOUBLE_PRECISION
|
||||
#define GJK_ACCURACY ((btScalar)1e-12)
|
||||
#define GJK_MIN_DISTANCE ((btScalar)1e-12)
|
||||
#define GJK_DUPLICATED_EPS ((btScalar)1e-12)
|
||||
#else
|
||||
#define GJK_ACCURACY ((btScalar)0.0001)
|
||||
#define GJK_MIN_DISTANCE ((btScalar)0.0001)
|
||||
#define GJK_DUPLICATED_EPS ((btScalar)0.0001)
|
||||
#endif //BT_USE_DOUBLE_PRECISION
|
||||
|
||||
|
||||
#define GJK_SIMPLEX2_EPS ((btScalar)0.0)
|
||||
#define GJK_SIMPLEX3_EPS ((btScalar)0.0)
|
||||
#define GJK_SIMPLEX4_EPS ((btScalar)0.0)
|
||||
|
||||
/* EPA */
|
||||
#define EPA_MAX_VERTICES 64
|
||||
#define EPA_MAX_FACES (EPA_MAX_VERTICES*2)
|
||||
#define EPA_MAX_VERTICES 128
|
||||
#define EPA_MAX_ITERATIONS 255
|
||||
#define EPA_ACCURACY ((btScalar)0.0001)
|
||||
#define EPA_FALLBACK (10*EPA_ACCURACY)
|
||||
#define EPA_PLANE_EPS ((btScalar)0.00001)
|
||||
#define EPA_INSIDE_EPS ((btScalar)0.01)
|
||||
|
||||
#ifdef BT_USE_DOUBLE_PRECISION
|
||||
#define EPA_ACCURACY ((btScalar)1e-12)
|
||||
#define EPA_PLANE_EPS ((btScalar)1e-14)
|
||||
#define EPA_INSIDE_EPS ((btScalar)1e-9)
|
||||
#else
|
||||
#define EPA_ACCURACY ((btScalar)0.0001)
|
||||
#define EPA_PLANE_EPS ((btScalar)0.00001)
|
||||
#define EPA_INSIDE_EPS ((btScalar)0.01)
|
||||
#endif
|
||||
|
||||
#define EPA_FALLBACK (10*EPA_ACCURACY)
|
||||
#define EPA_MAX_FACES (EPA_MAX_VERTICES*2)
|
||||
|
||||
|
||||
// Shorthands
|
||||
@@ -242,7 +259,7 @@ namespace gjkepa2_impl
|
||||
/* Check for termination */
|
||||
const btScalar omega=btDot(m_ray,w)/rl;
|
||||
alpha=btMax(omega,alpha);
|
||||
if(((rl-alpha)-(GJK_ACCURARY*rl))<=0)
|
||||
if(((rl-alpha)-(GJK_ACCURACY*rl))<=0)
|
||||
{/* Return old simplex */
|
||||
removevertice(m_simplices[m_current]);
|
||||
break;
|
||||
@@ -1015,7 +1032,7 @@ bool btGjkEpaSolver2::SignedDistance(const btConvexShape* shape0,
|
||||
/* Symbols cleanup */
|
||||
|
||||
#undef GJK_MAX_ITERATIONS
|
||||
#undef GJK_ACCURARY
|
||||
#undef GJK_ACCURACY
|
||||
#undef GJK_MIN_DISTANCE
|
||||
#undef GJK_DUPLICATED_EPS
|
||||
#undef GJK_SIMPLEX2_EPS
|
||||
|
||||
@@ -30,7 +30,11 @@ subject to the following restrictions:
|
||||
#endif
|
||||
|
||||
//must be above the machine epsilon
|
||||
#define REL_ERROR2 btScalar(1.0e-6)
|
||||
#ifdef BT_USE_DOUBLE_PRECISION
|
||||
#define REL_ERROR2 btScalar(1.0e-12)
|
||||
#else
|
||||
#define REL_ERROR2 btScalar(1.0e-6)
|
||||
#endif
|
||||
|
||||
//temp globals, to improve GJK/EPA/penetration calculations
|
||||
int gNumDeepPenetrationChecks = 0;
|
||||
|
||||
Reference in New Issue
Block a user