From 0c874aa43a62dfc8d38e9e52d1d9435a508b5535 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Mon, 20 Mar 2017 19:38:59 -0700 Subject: [PATCH] fix issue introduced in previous commit, related to btMultiBodyConstraintSolver friction/penetration handling --- .../Featherstone/btMultiBodyConstraintSolver.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp b/src/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp index e6bbfb5d7..77a4901e5 100644 --- a/src/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp +++ b/src/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp @@ -442,7 +442,10 @@ void btMultiBodyConstraintSolver::setupMultiBodyContactConstraint(btMultiBodySol distance = cp.getDistance()+infoGlobal.m_linearSlop; } else { - distance = (cp.getPositionWorldOnA() - cp.getPositionWorldOnB()).dot(contactNormal); + if (cp.m_contactPointFlags & BT_CONTACT_FLAG_FRICTION_ANCHOR) + { + distance = (cp.getPositionWorldOnA() - cp.getPositionWorldOnB()).dot(contactNormal); + } } @@ -541,17 +544,14 @@ void btMultiBodyConstraintSolver::setupMultiBodyContactConstraint(btMultiBodySol btScalar positionalError = 0.f; btScalar velocityError = restitution - rel_vel;// * damping; //note for friction restitution is always set to 0 (check above) so it is acutally velocityError = -rel_vel for friction - if (distance>0 && !isFriction) + if (distance>0) { positionalError = 0; velocityError -= distance / infoGlobal.m_timeStep; } else { - if (cp.m_contactPointFlags & BT_CONTACT_FLAG_FRICTION_ANCHOR) - { - positionalError = -distance * erp/infoGlobal.m_timeStep; - } + positionalError = -distance * erp/infoGlobal.m_timeStep; } btScalar penetrationImpulse = positionalError*solverConstraint.m_jacDiagABInv;