6

OpenGLで簡単なシーンを描いています。QGLWidget をサブクラス化し、paintGL() をオーバーライドしました。そこには空想はありません:

void CGLWidget::paintGL()
 {
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    gluLookAt (120.0, 160.0, -300.0, 0.0 + 120.0, 0.0 + 160.0, 2.0 - 300.0, 0.0, 1.0, 0.0);
    glScalef(1.0f/300.0f, 1.0f/300.0f, 1.0f/300.0f);
    glClear(GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(80.0, width()/(double)height(), 5.0, 100000.0);

    glMatrixMode(GL_MODELVIEW);
    glBegin(GL_POINTS);
    glColor3f(1.0f,0.6f,0.0f);
    glVertex3d(x, y, z);

    // ...drawing some more points...

    glEnd();

 }

updateGL()メイン ウィンドウに GL ウィジェットをトリガーするタイマーがあります。paintGL()呼び出されることを確認しました。ただし、画面上の実際の画像が更新されることはほとんどありません。ウィンドウのサイズを変更しても、シーンが更新されません。それはなぜですか、どうすれば強制的に更新できますか?

4

2 に答える 2

14

タイマーからupdateGL()を呼び出さずに、代わりにupdate()を呼び出して、ビューがペイントイベントを確実に取得するようにします。

于 2013-02-21T12:21:54.677 に答える
10

CGLWidget コンストラクター内

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(10);

timer -> start(VALUE);

play with `VALUE 10 は単なる例です。

飾る

于 2013-02-21T13:51:41.953 に答える