Это одна из проблем вращения, для которой матрицы особенно полезны для
Сначала разбейте вашу матрицу на три вектора компонентов (вверх, вперед и вправо).
Настройтевектор к тому, что вы хотите, чтобы это было.Затем отрегулируйте прямой и правый векторы так, чтобы они находились под прямым углом, для этого можно было бы использовать перекрестные произведения.
Например:
//Gets a perpendicular vector
V3 V3::Perp() {
V3 perp = v.Cross(NewV3(-1, 0, 0));
if(perp.Length() == 0) {
// If v is too close to -x try -y
perp = v.Cross(NewV3(0, -1, 0));
}
return perp.Unit();
}
//up = Whatever you need
forward = up.Perp()
right = cross(up, forward);
Послечто, вставь свои векторы обратно в матрицу и вуаля: D.