0

2 つの QGLWidget を含む QMainWindow があります。ウィジェットはデフォルトのコンストラクターを使用し、コンテキストを共有しません。ウィジェットはどちらも 2 次元データを表示し、クリックとドラッグが可能です。

これは gluUnproject を使用して機能し、作成された最初の QGLWidget でうまく機能します。2 番目のウィジェットをクリックすると、すべてが期待どおりに機能します。ただし、2 つ目のウィジェットをドラッグすると、動きがスムーズになりません。さらに悪いことに、2 番目のウィジェットがドラッグされると、1 番目のウィジェットの gluUnproject が、2 番目のディスプレイがドラッグされた方向と距離に関連して表示されるマージンだけずれます。

描画メソッドの開始時、マウス イベントの開始時、および一方、他方、および両方の組み合わせで 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 に答える