From b578361acfafe47c43199bf539074a9f32e83ccc Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Wed, 7 Mar 2018 14:51:51 -0800 Subject: [PATCH] Use kF_UseGjkConvexCastRaytest by default for raycast in PyBullet (it is more robust/accurate, but a bit slower) Use 10*EPSILON, as suggested in Gino's paper: http://www.continuousphysics.com/ftp/pub/test/files/physics/papers/jgt04raycast.pdf --- examples/SharedMemory/PhysicsServerCommandProcessor.cpp | 3 +++ .../NarrowPhaseCollision/btSubSimplexConvexCast.cpp | 7 ++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index 5c89ea86a..f98c290ce 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -43,6 +43,7 @@ #include "../Utils/b3Clock.h" #include "b3PluginManager.h" #include "../Extras/Serialize/BulletFileLoader/btBulletFile.h" +#include "BulletCollision/NarrowPhaseCollision/btRaycastCallback.h" #ifdef STATIC_LINK_VR_PLUGIN @@ -4472,6 +4473,8 @@ bool PhysicsServerCommandProcessor::processRequestRaycastIntersectionsCommand(co clientCmd.m_requestRaycastIntersections.m_rayToPositions[ray][2]); btCollisionWorld::ClosestRayResultCallback rayResultCallback(rayFromWorld,rayToWorld); + rayResultCallback.m_flags |= btTriangleRaycastCallback::kF_UseGjkConvexCastRaytest; + m_data->m_dynamicsWorld->rayTest(rayFromWorld,rayToWorld,rayResultCallback); int rayHits = serverStatusOut.m_raycastHits.m_numRaycastHits; diff --git a/src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp b/src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp index ec638f60b..82465a2c4 100644 --- a/src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp +++ b/src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp @@ -72,11 +72,8 @@ bool btSubsimplexConvexCast::calcTimeOfImpact( btScalar dist2 = v.length2(); -#ifdef BT_USE_DOUBLE_PRECISION - btScalar epsilon = btScalar(0.0001); -#else - btScalar epsilon = btScalar(0.0001); -#endif //BT_USE_DOUBLE_PRECISION + btScalar epsilon = SIMD_EPSILON * 10; + btVector3 w,p; btScalar VdotR;