Multiple QGLWidgets and gluUnProject



我有一个包含两个QGLWidget的QMainWindow。小部件使用默认的构造函数,并且不共享上下文。小部件既显示二维数据,又允许单击和拖动。

这使用gluUnproject工作,并且在创建的第一个QGLWidget上工作良好。当点击第二个小部件时,一切都如预期的那样工作。然而,当拖动第二个小部件时,移动并不平滑。更糟糕的是,一旦拖动了第二个小部件,第一个小部件的gluUnproject就会按一定的幅度关闭,这似乎与拖动第二个显示器的方向和距离有关。

我尝试过在绘图方法开始时、鼠标事件开始时调用makeCurrent(),以及其中一个、另一个和两者的组合,但没有看到任何改进。

void MyGLWidget::paintEvent(QPaintEvent *event){
    glViewport(0, 0, widgetWidth, widgetHeight);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(90,(GLfloat)((widgetWidth/widgetHeight)),0.1f,-zoomMin);
    glTranslatef(camera.x, camera.y, camera.zoom);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    //[GL Drawing code]
    glGetDoublev( GL_MODELVIEW_MATRIX, _modelview );
    glGetDoublev( GL_PROJECTION_MATRIX, _projection );
    glGetIntegerv( GL_VIEWPORT, _viewport );
}

确保传递给gluUnProject的视口和矩阵数据与正在交互的小部件的数据匹配。理想情况下,您可以在绘图时将它们的副本创建到某个小部件类成员变量中。

相关内容

  • 没有找到相关文章

最新更新