Я ужасно разбираюсь в матричной математике, но у меня есть ситуация, когда мне нужно ее масштабировать. Матрица является экземпляром пользовательского класса, определенного здесь, а мой объект масштабирования — это вектор, содержащий 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]); }
}