From ae9fb3ca8f5f48f156b7ee2f16c2ea7934c419ac Mon Sep 17 00:00:00 2001 From: Xuchen Han Date: Mon, 3 Aug 2020 21:37:29 -0700 Subject: [PATCH] Change picking force to implicit for all integration schemes. --- src/BulletSoftBody/btDeformableBackwardEulerObjective.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/BulletSoftBody/btDeformableBackwardEulerObjective.cpp b/src/BulletSoftBody/btDeformableBackwardEulerObjective.cpp index e3b8a462b..0c3e0b5eb 100644 --- a/src/BulletSoftBody/btDeformableBackwardEulerObjective.cpp +++ b/src/BulletSoftBody/btDeformableBackwardEulerObjective.cpp @@ -86,7 +86,8 @@ void btDeformableBackwardEulerObjective::multiply(const TVStack& x, TVStack& b) { // add damping matrix m_lf[i]->addScaledDampingForceDifferential(-m_dt, x, b); - if (m_implicit) + // Always integrate picking force implicitly for stability. + if (m_implicit || m_lf[i]->getForceType() == BT_MOUSE_PICKING_FORCE) { m_lf[i]->addScaledElasticForceDifferential(-m_dt * m_dt, x, b); } @@ -176,7 +177,8 @@ void btDeformableBackwardEulerObjective::computeResidual(btScalar dt, TVStack& r // add implicit force for (int i = 0; i < m_lf.size(); ++i) { - if (m_implicit) + // Always integrate picking force implicitly for stability. + if (m_implicit || m_lf[i]->getForceType() == BT_MOUSE_PICKING_FORCE) { m_lf[i]->addScaledForces(dt, residual); }