Вращение в OpenGL относительно области просмотра

Я пытаюсь отобразить объект в представлении, которое может быть повернуто естественно путем перетаскивания курсора/сенсорного экрана. В данный момент у меня есть вращение X и Y объекта как это

glRotatef(rotateX, 0f, 1f, 0f); // Dragging along X, so spin around Y axis
glRotatef(rotateY, 1f, 0f, 0f);

Я понимаю, почему это не делает то, что я хочу, чтобы это сделало (например, если Вы вращаете его, правильные 180 градусов, вверх и вниз по вращению инвертируется). Я просто не могу выяснить путь к обоим направлениям для пребывания лево-правым и вниз относительно средства просмотра.

Я могу предположить, что камера починена и смотрящий вдоль оси Z. Какие-либо идеи?

8
задан Nick 3 May 2010 в 13:51
поделиться

1 ответ

Лучше всего реализовать на основе Quaternion вращение. В мире Quaternion каждый раз, когда вы вращаете, он будет выровнен по оси, указанной вами, без влияния предыдущих вращений. Вот почему он не страдает от блокировки кардана.

Я нашел эти страницы полезными для реализации кватернионов:

Удачи. Я уверен, что есть и другие решения, но это одно из самых чистых, которые у вас есть.

7
ответ дан 5 December 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: