forked from bartvdbraak/blender
43 lines
2.0 KiB
Diff
43 lines
2.0 KiB
Diff
|
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);
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
}
|