У меня есть игрок в форме сферы, которая может свободно перемещаться по направлениям x и z. Игрокам текущая скорость сохраняется в векторе, который добавляется к позиции игроков на каждом кадре:Вращение матрицы в направлении вектора?
m_position += m_speed;
У меня также есть матрица поворота, что я хотел бы, чтобы повернуть в направлении, перемещение игрока в (представьте, как мяч будет вращаться, если он скатится на пол). Вот короткое видео, чтобы помочь визуализировать проблему: http://imgur.com/YrTG2al
Обратите внимание на видео, когда я начинаю двигаться вверх и вниз (Z) в противоположность не влево и вправо (X) ось вращения больше не соответствует движению игрока.
Код, используемый для получения результатов:
glm::vec3 UP = glm::vec3(0, 1, 0);
float rollSpeed = fabs(m_Speed.x + m_Speed.z);
if (rollSpeed > 0.0f) {
m_RotationMatrix = glm::rotate(m_RotationMatrix, rollSpeed, glm::cross(UP, glm::normalize(m_Speed)));
}
благодарных за помощью
вращения необходимы две вещи: ось вращения и направление вращения. Когда вы говорите «вращать матрицу в направлении вектора», возможно, вы имеете в виду поворот с вектором в качестве оси вращения? – user463035818
@ tobi303 Возможно, мой вопрос был не очень ясен. В основном я пытаюсь выяснить правильную ось, которую нужно использовать при вращении матрицы, учитывая текущую скорость игроков. – bapibopi
Возможно, небольшой чертеж может помочь проиллюстрировать проблему – user463035818