Я использую OpenGL в Qt через QGLWidget
и пытаюсь реализовать базовое взаимодействие с мышью и клавиатурой.
Так, например, клавиши со стрелками на клавиатуре будут использоваться для «панорамирования» сцены, колесико мыши — для увеличения сцены, а мышь следует использовать для вращения модели.
Я понял, как реализовать панорамирование и масштабирование, но у меня проблемы с вращением.
Это то, что у меня есть до сих пор:
void MyGLWidget::paintGL() {
glLoadIdentity();
gluLookAt(0+camDelta[0],0+camDelta[1],-100+camDelta[2],centerCoords[0]+lookAtDelta[0],centerCoords[1]+lookAtDelta[1],centerCoords[2]+lookAtDelta[2],0,1,0);
// draw stuff here
}
Итак, в основном я установил начальные параметры gluLookAt
, а затем добавил два массива, float camDelta[3]
и float lookAtDelta[3]
, чтобы отслеживать изменение положения камеры и того, куда она смотрит, в ответ на взаимодействие пользователя со сценой.
Для колеса мыши я делаю:
void MyGLWidget::wheelEvent(QWheelEvent *event) {
camDelta[2] += (event->delta() / 8.0 / 15.0) * WHEEL_DELTA;
lookAtDelta[2] += (event->delta() / 8.0 / 15.0) * WHEEL_DELTA;
updateGL();
}
Точно так же в MyGLWidget::keyPressEvent
я изменяю поле дельт [0]
для панорамирования влево и вправо, а дельты [1]
для панорамирования вверх и вниз.
Итак, мой вопрос: как мне реализовать что-то подобное для поддержки вращения с помощью мыши? Я немного запутался, потому что я предполагаю, что мне придется как-то изменить не только то, куда смотрит камера, но и вектор вверх, но у меня нет четкого представления о том, как это сделать.