Sto disegnando una scena semplice con Open GL. Ho sottoclasse QGLWidget e sovrascritto paintGL(). Niente di speciale c'è:Come forzare QGLWidget ad aggiornare lo schermo?
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();
}
Ho un timer nella finestra principale che innesca updateGL()
di widget di GL. Ho verificato che venga chiamato paintGL()
. Tuttavia, l'immagine reale sullo schermo viene aggiornata solo molto raramente. Anche se ridimensiono la finestra, la scena non viene aggiornata. Perché è così e come posso forzarlo ad aggiornare?
posso chiedere: Perché si inizializza la proiezione e la matrice MV due volte in 'paintGL'? Trai qualcosa? In caso contrario, si sovrascrivono le prime matrici con le seconde e si può spostare questo codice in 'resizeGL' (proiezione) e' initializeGL' (vista modello) – leemes
@leemes: Nessuna idea, in realtà ... È un bug, residui del mio tentativo di trovare i parametri di proiezione e MV che effettivamente funzionano. Risolto, grazie. –