私は行列の数学がひどいですが、1つをスケーリングする必要がある状況があります。マトリックスはここで定義されたカスタムクラスのインスタンスであり、私のスケーリングオブジェクトは3つのfloat(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]); }
}