Improved the code that computes the (u, v) coordinates for a triangle vertices.
This commit is contained in:
parent
cc5d062ca5
commit
55c4f190b1
@ -150,27 +150,30 @@ b3Cloth::b3Cloth(const b3ClothDef& def) :
|
|||||||
triangle->m_aabbProxy.owner = triangle;
|
triangle->m_aabbProxy.owner = triangle;
|
||||||
triangle->m_broadPhaseId = m_contactManager.m_broadPhase.CreateProxy(aabb, &triangle->m_aabbProxy);
|
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
|
// v1
|
||||||
b3Vec2 uv1;
|
b3Vec2 uv1;
|
||||||
uv1.SetZero();
|
uv1.SetZero();
|
||||||
|
|
||||||
// v2
|
// v2
|
||||||
b3Vec3 AB = B - A;
|
|
||||||
|
|
||||||
b3Vec2 uv2;
|
b3Vec2 uv2;
|
||||||
uv2.x = b3Length(AB);
|
uv2.x = b3Length(AB);
|
||||||
uv2.y = 0.0f;
|
uv2.y = 0.0f;
|
||||||
|
|
||||||
// v3
|
// v3
|
||||||
b3Vec3 n_AB = b3Normalize(AB);
|
B3_ASSERT(uv2.x > 0.0f);
|
||||||
b3Vec3 AC = C - A;
|
b3Vec3 n_AB = AB / uv2.x;
|
||||||
float32 len_AC = b3Length(AC);
|
|
||||||
|
// A = b * h / 2
|
||||||
|
// h = (A * 2) / b
|
||||||
|
float32 A2 = b3Length(b3Cross(AB, AC));
|
||||||
|
B3_ASSERT(A2 > 0.0f);
|
||||||
|
|
||||||
b3Vec2 uv3;
|
b3Vec2 uv3;
|
||||||
uv3.x = b3Dot(n_AB, AC);
|
uv3.x = b3Dot(n_AB, AC);
|
||||||
uv3.y = b3Sqrt(len_AC * len_AC - uv3.x * uv3.x);
|
uv3.y = A2 / uv2.x;
|
||||||
|
|
||||||
// Strech matrix
|
// Strech matrix
|
||||||
float32 du1 = uv2.x - uv1.x;
|
float32 du1 = uv2.x - uv1.x;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user