我对矩阵数学很糟糕,但我有一种情况需要缩放一个。该矩阵是此处定义的自定义类的一个实例,我的缩放对象是一个包含 3 个浮点数 (x,y,z) 的向量。我想要我需要的实际代码而不是通用解释,因为我已经走上了这条路,只是不了解所涉及的数学。幸运的是,一旦我可以缩放矩阵,我想要完成的事情就相当简单了。
这里要澄清的是我正在更新的代码。它使用相对变换遍历链接对象的层次结构,并将 mat& 更新为绝对变换:
void LocalModelPiece::GetPiecePosIter(CMatrix44f* mat) const
{
if (parent) {
parent->GetPiecePosIter(mat);
}
if (pos.x || pos.y || pos.z) { mat->Translate(pos.x, pos.y, pos.z); }
// --> My problem is here. There is no Scale() method, I need one. <--
if (scale.x!=1.0f || scale.y!=1.0f || scale.z!=1.0f) { mat->Scale(scale.x, scale.y, scale.z); }
if (rot[1]) { mat->RotateY(-rot[1]); }
if (rot[0]) { mat->RotateX(-rot[0]); }
if (rot[2]) { mat->RotateZ(-rot[2]); }
}