Fix RayShape collision jitter when used with a RigidBody

Scaling the depth was the wrong solution for the KinematicBody jitter
because it causes jitter with RigidBody. Instead scale the margin that
is ignored to allow KinematicBody to still pick up the ray shape in the
kinematic test when the shape is just at margin distance from another
one. This solution does not cause jitter with either KinematicBody or
RigidBody.
This commit is contained in:
Daniel Rakos 2019-02-20 15:04:36 +01:00
parent 75c89aaaef
commit 6587024207

View file

@ -100,8 +100,8 @@ void GodotRayWorldAlgorithm::processCollision(const btCollisionObjectWrapper *bo
btScalar depth(ray_shape->getScaledLength() * (btResult.m_closestHitFraction - 1)); btScalar depth(ray_shape->getScaledLength() * (btResult.m_closestHitFraction - 1));
if (depth >= -ray_shape->getMargin()) if (depth >= -ray_shape->getMargin() * 0.5)
depth *= 0.5; depth = 0;
if (ray_shape->getSlipsOnSlope()) if (ray_shape->getSlipsOnSlope())
resultOut->addContactPoint(btResult.m_hitNormalWorld, btResult.m_hitPointWorld, depth); resultOut->addContactPoint(btResult.m_hitNormalWorld, btResult.m_hitPointWorld, depth);