From b8ca0d3829ce006a24875c09a0d256c89fcb67ca Mon Sep 17 00:00:00 2001 From: Irlan <-> Date: Mon, 14 May 2018 13:08:31 -0300 Subject: [PATCH] better logic for tension contribution --- src/bounce/dynamics/cloth/spring_cloth.cpp | 19 ++++++----- src/bounce/dynamics/cloth/spring_solver.cpp | 36 ++++++++++----------- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/src/bounce/dynamics/cloth/spring_cloth.cpp b/src/bounce/dynamics/cloth/spring_cloth.cpp index ef31019..bd2ca14 100644 --- a/src/bounce/dynamics/cloth/spring_cloth.cpp +++ b/src/bounce/dynamics/cloth/spring_cloth.cpp @@ -313,19 +313,18 @@ void b3SpringCloth::GetTension(b3Array& T) const b3Vec3 dx = x1 - x2; float32 L = b3Length(dx); - if (L < L0) + if (L >= L0) { - L = L0; + // Force is tension. + b3Vec3 n = dx / L; + + b3Vec3 sf1 = -ks * (L - L0) * n; + b3Vec3 sf2 = -sf1; + + T[i1] += sf1; + T[i2] += sf2; } - b3Vec3 n = dx / L; - - b3Vec3 sf1 = -ks * (L - L0) * n; - b3Vec3 sf2 = -sf1; - - T[i1] += sf1; - T[i2] += sf2; - // Damping b3Vec3 dv = v1 - v2; diff --git a/src/bounce/dynamics/cloth/spring_solver.cpp b/src/bounce/dynamics/cloth/spring_solver.cpp index f669c20..b13bbbd 100644 --- a/src/bounce/dynamics/cloth/spring_solver.cpp +++ b/src/bounce/dynamics/cloth/spring_solver.cpp @@ -195,31 +195,29 @@ void b3SpringSolver::ApplySpringForces() b3Vec3 x2 = m_x[i2]; b3Vec3 v2 = m_v[i2]; - // Compute strech forces + const b3Mat33 I = b3Mat33_identity; + + // Strech b3Vec3 dx = x1 - x2; float32 L = b3Length(dx); - // Ensure force is a tension. - if (L < L0) + if (L >= L0) { - L = L0; + // Force is tension. + b3Vec3 n = dx / L; + + b3Vec3 sf1 = -ks * (L - L0) * n; + b3Vec3 sf2 = -sf1; + + m_f[i1] += sf1; + m_f[i2] += sf2; + + b3Mat33 Jx11 = -ks * (b3Outer(dx, dx) + (1.0f - L0 / L) * (I - b3Outer(dx, dx))); + + m_Jx[i] = Jx11; } - b3Vec3 n = dx / L; - - b3Vec3 sf1 = -ks * (L - L0) * n; - b3Vec3 sf2 = -sf1; - - m_f[i1] += sf1; - m_f[i2] += sf2; - - const b3Mat33 I = b3Mat33_identity; - - b3Mat33 Jx11 = -ks * (b3Outer(dx, dx) + (1.0f - L0 / L) * (I - b3Outer(dx, dx))); - - m_Jx[i] = Jx11; - - // Compute damping forces + // Damping b3Vec3 dv = v1 - v2; b3Vec3 df1 = -kd * dv;