From ebc84b3b8d9c73dd4cfa783fc41be923b63b17ca Mon Sep 17 00:00:00 2001 From: Xuchen Han Date: Wed, 15 Apr 2020 13:33:43 -0700 Subject: [PATCH] use x_n instead of x_{n+1} to calculate deformable penetration distance --- src/BulletSoftBody/btSoftBody.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/BulletSoftBody/btSoftBody.cpp b/src/BulletSoftBody/btSoftBody.cpp index 95ae0035d..def4cefbd 100644 --- a/src/BulletSoftBody/btSoftBody.cpp +++ b/src/BulletSoftBody/btSoftBody.cpp @@ -2920,10 +2920,11 @@ bool btSoftBody::checkDeformableFaceContact(const btCollisionObjectWrapper* colO return false; contact_point = results.witnesses[0]; getBarycentric(contact_point, f.m_n[0]->m_q, f.m_n[1]->m_q, f.m_n[2]->m_q, bary); + btVector3 curr = BaryEval(f.m_n[0]->m_x, f.m_n[1]->m_x, f.m_n[2]->m_x, bary); nrm = results.normal; cti.m_colObj = colObjWrap->getCollisionObject(); cti.m_normal = nrm; - cti.m_offset = dst + csh->getMargin(); + cti.m_offset = dst + (curr - contact_point).dot(nrm); } return (dst < 0); }