在我的探查器中,查找重心坐标显然是一个瓶颈。我正在寻求提高效率。
它遵循shirley中的方法,在其中您可以计算通过将点P嵌入三角形内部而形成的三角形的面积。
码:
Vector Triangle::getBarycentricCoordinatesAt( const Vector & P ) const
{
Vector bary ;
// The area of a triangle is
real areaABC = DOT( normal, CROSS( (b - a), (c - a) ) ) ;
real areaPBC = DOT( normal, CROSS( (b - P), (c - P) ) ) ;
real areaPCA = DOT( normal, CROSS( (c - P), (a - P) ) ) ;
bary.x = areaPBC / areaABC ; // alpha
bary.y = areaPCA / areaABC ; // beta
bary.z = 1.0f - bary.x - bary.y ; // gamma
return bary ;
}
这种方法有效,但我正在寻找一种更有效的方法!