Rysuję prostą scenę z Open GL. Podklasy QGLWidget i overriden paintGL(). Nic nadzwyczajnego tam:Jak zmusić QGLWidget do aktualizacji ekranu?
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();
}
Mam czasomierza w głównym oknie, które wywołają updateGL()
widgetu GL. Sprawdziłem, że powoduje wywołanie paintGL()
. Jednak rzeczywisty obraz na ekranie jest bardzo rzadko aktualizowany. Nawet jeśli zmieniam rozmiar okna, scena nie jest aktualizowana. Dlaczego tak jest i jak mogę go zmusić do aktualizacji?
Mogę zapytać: Dlaczego zainicjować projekcję i MV matrycę dwa razy w 'paintGL'? Czy narysujesz coś pomiędzy? Jeśli nie, zastępujesz pierwsze macierze tymi drugimi i możesz przenieść ten kod do 'resizeGL' (rzutowanie) i' initializeGL' (model-view) – leemes
@leemes: Nie ma pojęcia, faktycznie ... To jest błąd, pozostałości moich prób znalezienia parametrów projekcji i MV, które faktycznie działają. Naprawiono, dziękuję. –