229 {
230 const std::array<Vec3f, 3> vec = {p2 - p1, p3 - p1, pt - p1};
231 const float d00 = vec[0].dot(vec[0]);
232 const float d01 = vec[0].dot(vec[1]);
233 const float d11 = vec[1].dot(vec[1]);
234 const float d20 = vec[2].dot(vec[0]);
235 const float d21 = vec[2].dot(vec[1]);
236 const float denom = d00 * d11 - d01 * d01;
237
238 const float v = (d11 * d20 - d01 * d21) / denom;
239 const float w = (d00 * d21 - d01 * d20) / denom;
240 const float u = 1.f - v - w;
241
242 return {u, v, w};
243 }