我在 Qt 中通过 OpenGL 使用 OpenGL 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
,我修改了用于左右平移的 deltas 字段,以及用于上下平移的 deltas'[0]
字段。[1]
所以我的问题是,我如何实现类似的东西来支持鼠标旋转?我有点困惑,因为我猜我不仅要改变相机的视线方向,还要改变向上的向量,但我对如何做到这一点并不清楚。