0

我有一个包含两个 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 );
}
4

1 回答 1

0

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

于 2013-02-05T16:09:41.537 回答