У меня есть вопрос относительно использования кватернионов для вращения моего графического объекта.Вращение объекта с кватернионом
У меня есть Transform
класс, который имеет следующий конструктор с параметрами по умолчанию:
Transform(const glm::vec3& pos = glm::vec3(0.0), const glm::quat& rot = glm::quat(1.0, 0.0, 0.0, 0.0),
const glm::vec3& scale = glm::vec3(1.0))
{
m_pos = pos;
m_rot = rot;
m_scale = scale;
}
В моем классе Transform
вычислить MVP
следующим образом:
glm::mat4 Transform::GetModelMatrix() const
{
glm::mat4 translate = glm::translate(glm::mat4(1.0), m_pos);
glm::mat4 rotate = glm::mat4_cast(m_rot);
glm::mat4 scale = glm::scale(glm::mat4(1.0), m_scale);
return translate * rotate * scale;
}
Проблема я столкнулся в том, что когда я использую const glm::quat& rot = glm::quat(1.0, 0.0, 0.0, 0.0)
, мой объект появляется нормально на экране. На следующем рисунке показано это:
Однако, если я пытаюсь использовать, например const glm::quat& rot = glm::quat(glm::radians(90.0f), 0.0, 1.0, 0.0)
(вращение на оси у на 90 градусов) мой объект выглядит, как будто это было уменьшено. На следующем изображении показано следующее:
Я не могу понять, что вызывает его, когда я пытаюсь повернуть его. Я пропустил что-то важное?
Если это какой-либо значимости, ниже, как рассчитать мой вид матрицы:
glm::mat4 Camera::GetView() const
{
glm::mat4 view = glm::lookAt(m_pos, m_pos + m_forward, m_up);
return view;
}
GLM не имеет кватернион конструктора угла и ось с указанием. Вы непосредственно инициализируете записи кватернионов своими значениями, в результате чего возникает какой-то странный ненормализованный кватернион. – derhass
@derhass, как я должен был инициализировать его? –