【发布时间】:2012-06-12 21:20:43
【问题描述】:
我正在通过QGLWidget 在Qt 中使用OpenGL,我正在尝试实现一些基本的鼠标和键盘驱动的交互。
例如,键盘方向键用于“平移”场景,鼠标滚轮用于放大场景,鼠标用于旋转模型。
我已经弄清楚如何实现平移和缩放,但是我在实现旋转时遇到了麻烦。
这是我目前所拥有的:
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] 以进行上下平移。
所以我的问题是,我如何实现类似的东西来支持鼠标旋转?我有点困惑,因为我猜我不仅要改变相机的视线方向,还要改变向上的矢量,但我真的不知道如何做到这一点。
【问题讨论】:
-
嗨 Houbysoft,我也在寻找 android 中的平移功能。[我需要使用触摸事件移动 GLSurfaceview]。如果您现在有任何想法,请提供任何示例代码。这对我完成我的工作会有帮助。我的示例代码在这里。mediafire.com/?09f9q51xnqhq2l7.which