Проблемы с преобразованием угла оси в кватернион

У меня есть вектор, который указывает с моей камеры на объект, на который я хочу указать, поэтому я хочу создать кватернион, который поворачивает камеру так, чтобы она указывала на этот вектор. Итак, я делаю это (используя glm)

glm::quat rotation=glm::angleAxis(0.0f,vector);

Если я правильно понимаю эту функцию в случае вектора, например (0,0f, 0,0f, -1,0f), камера должна указывать вперед по оси глубины и без поворота. Но я не знаю, почему в этом случае он создает этот кватернион: x: -0 y: -0 z: -0 w: 1, который ничего не делает, а значения x, y, z отличаются от 0 только в том случае, если угол параметр, переданный в angleAxis (), отличается от 0. Почему это происходит? если я прохожу угол 0, разве он не должен просто создавать вращение только с рысканием и тангажем, но без крена?


person XaitormanX    schedule 14.09.2012    source источник


Ответы (1)


Уже иду ответ: (на форуме gameDev, от пользователя clb)

Нет, ваше понимание неверно. Вращение «угол-ось» вызывает вращение вокруг заданной оси на заданный угол. Если вы не укажете угол, вы всегда получите идентичность. Это потому, что вращение на нулевой угол, будь то вокруг любой оси, конечно, не вращается вообще.

Вы думаете о ротации LookAt. Я не уверен, что такое сигнатура функции в glm, но уверен, что у них есть похожая функция. Используйте вращение LookAt, чтобы ориентировать один вектор направления лицом к другому вектору.

person XaitormanX    schedule 16.09.2012