私はOpen GLで簡単なシーンを描いています。私はQGLWidgetをサブクラス化し、paintGL()をオーバーライドしました。そこに何も空想:QGLWidgetに画面を強制的に更新させる方法は?
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();
}
私はGLウィジェットのupdateGL()
をトリガし、メインウィンドウのタイマーを持っています。私はpaintGL()
が呼び出されたことを確認しました。ただし、画面上の実際の画像はごくまれにしか更新されません。ウィンドウのサイズを変更しても、シーンは更新されません。それはなぜですか、どうすれば強制的に更新することができますか?
私は質問:なぜ 'paintGL'で投影とMVマトリックスを2回初期化するのですか?その間に何かを描いていますか?そうでない場合は、最初の行列を2番目の行列で上書きし、このコードを 'resizeGL'(投影)と' initializeGL'(モデルビュー)に移動することができます – leemes
@leemes:実際には考えていません...残念なことに、私が実際に働く投影パラメータとMVパラメータを見つけようとしています。修正しました、ありがとうございます。 –