diff options
Diffstat (limited to 'extern/bullet2/patches/ghost_softbody.patch')
-rw-r--r-- | extern/bullet2/patches/ghost_softbody.patch | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/extern/bullet2/patches/ghost_softbody.patch b/extern/bullet2/patches/ghost_softbody.patch new file mode 100644 index 00000000000..b150d57040d --- /dev/null +++ b/extern/bullet2/patches/ghost_softbody.patch @@ -0,0 +1,42 @@ +Index: extern/bullet2/src/BulletSoftBody/btSoftBody.cpp +=================================================================== +--- extern/bullet2/src/BulletSoftBody/btSoftBody.cpp (Revision 43904) ++++ extern/bullet2/src/BulletSoftBody/btSoftBody.cpp (Revision 43905) +@@ -2780,21 +2780,23 @@ + { + const RContact& c = psb->m_rcontacts[i]; + const sCti& cti = c.m_cti; +- btRigidBody* tmpRigid = btRigidBody::upcast(cti.m_colObj); + +- const btVector3 va = tmpRigid ? tmpRigid->getVelocityInLocalPoint(c.m_c1)*dt : btVector3(0,0,0); +- const btVector3 vb = c.m_node->m_x-c.m_node->m_q; +- const btVector3 vr = vb-va; +- const btScalar dn = btDot(vr, cti.m_normal); +- if(dn<=SIMD_EPSILON) +- { +- const btScalar dp = btMin( (btDot(c.m_node->m_x, cti.m_normal) + cti.m_offset), mrg ); +- const btVector3 fv = vr - (cti.m_normal * dn); +- // c0 is the impulse matrix, c3 is 1 - the friction coefficient or 0, c4 is the contact hardness coefficient +- const btVector3 impulse = c.m_c0 * ( (vr - (fv * c.m_c3) + (cti.m_normal * (dp * c.m_c4))) * kst ); +- c.m_node->m_x -= impulse * c.m_c2; +- if (tmpRigid) +- tmpRigid->applyImpulse(impulse,c.m_c1); ++ if (cti.m_colObj->hasContactResponse()) { ++ btRigidBody* tmpRigid = btRigidBody::upcast(cti.m_colObj); ++ const btVector3 va = tmpRigid ? tmpRigid->getVelocityInLocalPoint(c.m_c1)*dt : btVector3(0,0,0); ++ const btVector3 vb = c.m_node->m_x-c.m_node->m_q; ++ const btVector3 vr = vb-va; ++ const btScalar dn = btDot(vr, cti.m_normal); ++ if(dn<=SIMD_EPSILON) ++ { ++ const btScalar dp = btMin( (btDot(c.m_node->m_x, cti.m_normal) + cti.m_offset), mrg ); ++ const btVector3 fv = vr - (cti.m_normal * dn); ++ // c0 is the impulse matrix, c3 is 1 - the friction coefficient or 0, c4 is the contact hardness coefficient ++ const btVector3 impulse = c.m_c0 * ( (vr - (fv * c.m_c3) + (cti.m_normal * (dp * c.m_c4))) * kst ); ++ c.m_node->m_x -= impulse * c.m_c2; ++ if (tmpRigid) ++ tmpRigid->applyImpulse(impulse,c.m_c1); ++ } + } + } + } |