OpenGL - найти вектор вращения для glRotate ()

0

Я работаю над проблемой внедрения roll-, pitch- и поворотов в стиле "рыскания" в OpenGL в течение довольно продолжительного времени, с ограниченным релевантным материалом, доступным в Интернете. Суть проблемы заключается в нахождении обновленных локальных осей, поскольку объект вращается. Например, вращение вокруг X приводит к изменению локальных осей Y и Z. Последующие вращения будут вокруг обновленных осей. Я нашел некоторые математические формулы для поиска обновленных векторов здесь:

http://nehe.gamedev.net/article/camera_class_tutorial/18010/

Однако новый вектор задается в терминах точек, например, вращение на 45 градусов вокруг оси Y изменяет ось X, которая теперь проходит через точки (0.71, 0, 0.71). Теперь вопрос заключается в том, как найти точки (x, y, z), которые могут быть переданы в glRotatef (angle, x, y, z). Заметим, что x, y, z лежат на проходящем через них векторе и в начале координат.

Я думаю о том, чтобы взять нормаль к линии, проходящей через (0.71, 0, 0.71) и происхождение, а затем снова взять нормаль, чтобы получить (x, y, z).

Может ли кто-нибудь предложить улучшение этого или альтернативный метод?

  • 0
    Не делайте свою жизнь сложнее, чем она должна быть. Вращение вокруг локальной оси X - это все еще вращение вокруг оси X. Вам просто нужно умножить матрицу вращения на правильной стороне текущей. И это зависит от того, является ли это преобразованием представления или преобразованием модели. Это может быть довольно некрасиво для достижения с помощью glRotate() и т. Д., Но эти функции в любом случае устарели. Вы должны рассмотреть возможность использования математической библиотеки, такой как glm. Это дает вам больше гибкости, и вращение вокруг локальных осей предоставляется бесплатно.
  • 0
    @NicoSchertler: я избегаю использования glm. Вы бы порекомендовали умножить матрицу преобразования, например, используя glMultMatrixf ()?
Показать ещё 7 комментариев
Теги:
opengl
vector
rotation

1 ответ

1

Я предлагаю вам использовать кватернионы. Сложно понять сначала несколько концептуально, но как только вы поймете суть этого, реализация довольно прямолинейна. Кроме того, поворот кватернионов позволяет избежать блокировки карданного вала :)

Сайт учебника OpenGL Quaternion:

http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-17-quaternions/

  • 0
    Кватернионы не предоставляют функциональной возможности, которую не предоставляют матрицы. Они могут быть немного быстрее и численно более стабильными, но в конце вы должны умножить их в правильном порядке, как матрицы.
  • 1
    Я только предлагаю альтернативный метод классическим преобразованиям Эйлера;) Более того, опубликованное мной руководство довольно четко объясняет преобразования кватернионов, и, следовательно, решает проблему «ограниченного релевантного материала, доступного онлайн».
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню