Coordenadas barentêntricas de um tetraedro

Eu gostaria de pedir ajuda com relação às coordenadas bariêntricas de um tetraedro:

Seguindo uma abordagem que encontrei aqui:http://www.cdsimpson.net/2014/10/barycentric-coordinates.html Eu implementei uma função C ++ para encontrar coordenadas baricêntricas de um ponto em um tetraedro:

float ScTP(const Vec &a, const Vec &b, const Vec &c)
{
    // computes scalar triple product
    return Dot(a, Cross(b, c));
}

Vec4f bary_tet(Vec3f a, Vec3f b, Vec3f c, Vec3f d, Vec3f p)
{
    float va, vb, vc, vd, v;
    Vec3f vap = p - a;
    Vec3f vbp = p - b;
    Vec3f vcp = p - c;
    Vec3f vdp = p - d;

    Vec3f vab = b - a;
    Vec3f vac = c - a;
    Vec3f vad = d - a;

    Vec3f vbc = c - b;
    Vec3f vbd = d - b;
    // ScTP computes the scalar triple product
    va = ScTP(vbp, vbd, vbc) * 1 / 6;
    vb = ScTP(vap, vac, vad) * 1 / 6;
    vc = ScTP(vap, vad, vab) * 1 / 6;
    vd = ScTP(vap, vab, vac) * 1 / 6;
    v = 1 / ScTP(vab, vac, vad) * 1 / 6;
    return Vec4f(va*v, vb*v, vc*v, vd*v);
}

No entanto, meu código parece calcular coordenadas baricêntricas um pouco erradas - comparando meus resultados com uma implementação de referência a partir daqui:http://dennis2society.de/painless-tetrahedral-barycentric-mapping meus quatro valores barricêntricos são cada um menores dos valores calculados pela implementação de referência.

Alguém identificou algum erro na minha implementação? Muito obrigado pela ajuda!

questionAnswers(1)

yourAnswerToTheQuestion