|
AABB取长方体为包围盒,发生转换后生成新的AABB;其中Pmin,Pmax是类AABB的成员变量。
void AABB::xform(const D3DXMATRIX& M, AABB& out)
{
// Convert to center/extent representation.
D3DXVECTOR3 c = center(); <--即c=(Pmin+Pmax)/2
D3DXVECTOR3 e = extent(); <--即e=(Pmax-Pmin)/2
// Transform center in usual way.
D3DXVec3TransformCoord(&c, &c, &M);
// Transform extent.
D3DXMATRIX absM;
D3DXMatrixIdentity(&absM);
absM(0,0) = fabsf(M(0,0)); absM(0,1) = fabsf(M(0,1)); absM(0,2) = fabsf(M(0,2));
absM(1,0) = fabsf(M(1,0)); absM(1,1) = fabsf(M(1,1)); absM(1,2) = fabsf(M(1,2));
absM(2,0) = fabsf(M(2,0)); absM(2,1) = fabsf(M(2,1)); absM(2,2) = fabsf(M(2,2));
D3DXVec3TransformNormal(&e, &e, &absM); //因为平移不影响向量的计算
// Convert back to AABB representation.
out.minPt = c - e;
out.maxPt = c + e;
}
摘自龙书-讲地形的章节
对M分量取绝对值,这一点,我想不通。请高人指点。 |
|