bug fix in neohookean force

This commit is contained in:
Xuchen Han
2019-08-27 10:17:00 -07:00
parent e73f70efa2
commit c722630fc7
2 changed files with 7 additions and 5 deletions

View File

@@ -357,7 +357,7 @@ void GraspDeformable::initPhysics()
// getDeformableDynamicsWorld()->addForce(psb, new btDeformableGravityForce(gravity));
// getDeformableDynamicsWorld()->addForce(psb, new btDeformableCorotatedForce(0,6));
btDeformableMassSpringForce* mass_spring = new btDeformableMassSpringForce(.5,0.04, true);
btDeformableMassSpringForce* mass_spring = new btDeformableMassSpringForce(.0,0.04, true);
getDeformableDynamicsWorld()->addForce(psb, mass_spring);
m_forces.push_back(mass_spring);

View File

@@ -87,18 +87,20 @@ public:
btMatrix3x3 C = F.transpose()*F;
btScalar J = F.determinant();
btScalar trace = C[0].getX() + C[1].getY() + C[2].getZ();
P = F * m_mu * ( 1. - 1. / (trace + 1.)) + F.adjoint() * (m_lambda * (J - 1) - 0.75 * m_mu);
P = F * m_mu * ( 1. - 1. / (trace + 1.)) + F.adjoint().transpose() * (m_lambda * (J - 1) - 0.75 * m_mu);
}
virtual void addScaledForceDifferential(btScalar scale, const TVStack& dv, TVStack& df)
{
}
void firstPiolaDifferential(const btMatrix3x3& F, const btMatrix3x3& G, btMatrix3x3& P)
void firstPiolaDifferential(const btMatrix3x3& F, const btMatrix3x3& dF, btMatrix3x3& dP)
{
btScalar J = F.determinant();
addScaledCofactorMatrixDifferential(F, G, m_lambda*(J-1), P);
P += F.adjoint() * m_lambda * DotProduct(F.adjoint(), G);
addScaledCofactorMatrixDifferential(F, dF, m_lambda*(J-1) - 0.75*m_mu, dP);
dP += F.adjoint().transpose() * m_lambda * DotProduct(F.adjoint().transpose(), dF);
//todo @xuchenhan: add the dP of the m_mu term.
}
btScalar DotProduct(const btMatrix3x3& A, const btMatrix3x3& B)