From 55c4f190b183b4a6bead4f51295fb30694c2cfd1 Mon Sep 17 00:00:00 2001 From: Irlan Date: Fri, 28 Jun 2019 14:53:09 -0300 Subject: [PATCH] Improved the code that computes the (u, v) coordinates for a triangle vertices. --- src/bounce/cloth/cloth.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/bounce/cloth/cloth.cpp b/src/bounce/cloth/cloth.cpp index 2e442ab..69a673c 100644 --- a/src/bounce/cloth/cloth.cpp +++ b/src/bounce/cloth/cloth.cpp @@ -150,27 +150,30 @@ b3Cloth::b3Cloth(const b3ClothDef& def) : triangle->m_aabbProxy.owner = triangle; triangle->m_broadPhaseId = m_contactManager.m_broadPhase.CreateProxy(aabb, &triangle->m_aabbProxy); - // uv coordinates for triangle - + b3Vec3 AB = B - A; + b3Vec3 AC = C - A; + // v1 b3Vec2 uv1; uv1.SetZero(); // v2 - b3Vec3 AB = B - A; - b3Vec2 uv2; uv2.x = b3Length(AB); uv2.y = 0.0f; // v3 - b3Vec3 n_AB = b3Normalize(AB); - b3Vec3 AC = C - A; - float32 len_AC = b3Length(AC); + B3_ASSERT(uv2.x > 0.0f); + b3Vec3 n_AB = AB / uv2.x; + + // A = b * h / 2 + // h = (A * 2) / b + float32 A2 = b3Length(b3Cross(AB, AC)); + B3_ASSERT(A2 > 0.0f); b3Vec2 uv3; uv3.x = b3Dot(n_AB, AC); - uv3.y = b3Sqrt(len_AC * len_AC - uv3.x * uv3.x); + uv3.y = A2 / uv2.x; // Strech matrix float32 du1 = uv2.x - uv1.x;