fixes to add improved double-precision for raycasts
This commit is contained in:
@@ -28,8 +28,11 @@ m_convexA(convexA),m_convexB(convexB)
|
|||||||
|
|
||||||
///Typically the conservative advancement reaches solution in a few iterations, clip it to 32 for degenerate cases.
|
///Typically the conservative advancement reaches solution in a few iterations, clip it to 32 for degenerate cases.
|
||||||
///See discussion about this here http://continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=565
|
///See discussion about this here http://continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=565
|
||||||
|
#ifdef BT_USE_DOUBLE_PRECISION
|
||||||
|
#define MAX_ITERATIONS 64
|
||||||
|
#else
|
||||||
#define MAX_ITERATIONS 32
|
#define MAX_ITERATIONS 32
|
||||||
|
#endif
|
||||||
bool btSubsimplexConvexCast::calcTimeOfImpact(
|
bool btSubsimplexConvexCast::calcTimeOfImpact(
|
||||||
const btTransform& fromA,
|
const btTransform& fromA,
|
||||||
const btTransform& toA,
|
const btTransform& toA,
|
||||||
@@ -77,8 +80,11 @@ bool btSubsimplexConvexCast::calcTimeOfImpact(
|
|||||||
|
|
||||||
|
|
||||||
btScalar dist2 = v.length2();
|
btScalar dist2 = v.length2();
|
||||||
|
#ifdef BT_USE_DOUBLE_PRECISION
|
||||||
btScalar epsilon = btScalar(0.0001);
|
btScalar epsilon = btScalar(0.0001);
|
||||||
|
#else
|
||||||
|
btScalar epsilon = btScalar(0.0001);
|
||||||
|
#endif //BT_USE_DOUBLE_PRECISION
|
||||||
btVector3 w,p;
|
btVector3 w,p;
|
||||||
btScalar VdotR;
|
btScalar VdotR;
|
||||||
|
|
||||||
|
|||||||
@@ -435,11 +435,19 @@ int btVoronoiSimplexSolver::pointOutsideOfPlane(const btPoint3& p, const btPoint
|
|||||||
btScalar signd = (d - a).dot( normal); // [AD AB AC]
|
btScalar signd = (d - a).dot( normal); // [AD AB AC]
|
||||||
|
|
||||||
#ifdef CATCH_DEGENERATE_TETRAHEDRON
|
#ifdef CATCH_DEGENERATE_TETRAHEDRON
|
||||||
|
#ifdef BT_USE_DOUBLE_PRECISION
|
||||||
|
if (signd * signd < (btScalar(1e-8) * btScalar(1e-8)))
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#else
|
||||||
if (signd * signd < (btScalar(1e-4) * btScalar(1e-4)))
|
if (signd * signd < (btScalar(1e-4) * btScalar(1e-4)))
|
||||||
{
|
{
|
||||||
// printf("affine dependent/degenerate\n");//
|
// printf("affine dependent/degenerate\n");//
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// Points on opposite sides if expression signs are opposite
|
// Points on opposite sides if expression signs are opposite
|
||||||
return signp * signd < btScalar(0.);
|
return signp * signd < btScalar(0.);
|
||||||
|
|||||||
Reference in New Issue
Block a user