diff --git a/src/bounce/cloth/cloth_force_solver.cpp b/src/bounce/cloth/cloth_force_solver.cpp index 8da4703..2fb3953 100644 --- a/src/bounce/cloth/cloth_force_solver.cpp +++ b/src/bounce/cloth/cloth_force_solver.cpp @@ -261,7 +261,7 @@ void b3ClothForceSolver::Solve(float32 dt, const b3Vec3& gravity) // b = h * (f0 + h * dfdx * v0 + dfdx * y) // A - b3SparseMat33 A = M - h * dfdv - h * h * dfdx; + b3SparseMat33 A = M - h * dfdv - (h * h) * dfdx; // View for A b3SparseMat33View viewA(A); diff --git a/src/bounce/cloth/shear_force.cpp b/src/bounce/cloth/shear_force.cpp index b79b549..fd0d506 100644 --- a/src/bounce/cloth/shear_force.cpp +++ b/src/bounce/cloth/shear_force.cpp @@ -134,21 +134,14 @@ void b3ShearForce::Apply(const b3ClothForceSolverData* data) m_f3 += fs[2]; // Jacobian - b3Mat33 d2Cxij; - for (u32 i = 0; i < 3; ++i) - { - for (u32 j = 0; j < 3; ++j) - { - d2Cxij(i, j) = alpha * (dwudx[i] * dwvdx[j] + dwudx[j] * dwvdx[i]); - } - } - b3Mat33 J[3][3]; for (u32 i = 0; i < 3; ++i) { for (u32 j = 0; j < 3; ++j) { - b3Mat33 Jij = -m_ks * (b3Outer(dCdx[i], dCdx[j]) + (C * d2Cxij(i, j) * I)); + b3Mat33 d2Cxij = alpha * (dwudx[i] * dwvdx[j] + dwudx[j] * dwvdx[i]) * I; + + b3Mat33 Jij = -m_ks * (b3Outer(dCdx[i], dCdx[j]) + C * d2Cxij); J[i][j] = Jij; }