Use higher precision GJK/EPA collision tolerances in BT_USE_DOUBLE_PRECISION

See https://raw.githubusercontent.com/billhoffman/bullet-pod/ac6aae3e3ee8137de484471094a65bfe166898b4/bullet_gjk_accuracy_patch.diff
This commit is contained in:
Erwin Coumans
2016-03-10 23:12:22 -08:00
parent c69524be9e
commit ea6ecd3579
2 changed files with 31 additions and 10 deletions

View File

@@ -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_ACCURARY ((btScalar)1e-12)
#define GJK_MIN_DISTANCE ((btScalar)1e-12)
#define GJK_DUPLICATED_EPS ((btScalar)1e-12)
#else
#define GJK_ACCURARY ((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_FALLBACK (10*EPA_ACCURACY)
#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_MAX_FACES (EPA_MAX_VERTICES*2)
// Shorthands

View File

@@ -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;