Comment faire pour forcer QGLWidget à l'écran de mise à jour?
Je suis le dessin d'une scène simple avec Open GL. J'ai sous-classé QGLWidget et remplacé paintGL(). Rien de compliqué, il y a:
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();
}
J'ai une minuterie dans la fenêtre principale qui déclenche updateGL()
de GL widget. J'ai vérifié qu'il en résulte paintGL()
d'être appelé. Cependant, le réel de l'image sur l'écran est mis à jour que très rarement. Même si je redimensionner la fenêtre, la scène n'est pas mis à jour. Pourquoi et comment puis-je forcer à mettre à jour?
- Puis-je vous demander: Pourquoi avez-vous initialiser la projection et le MV de la matrice à deux reprises dans
paintGL
? Ne vous en tirer quelque chose entre les deux? Si non, vous écrasez la première des matrices avec la seconde et vous pouvez déplacer ce code dansresizeGL
(projection) etinitializeGL
(modèle-vue) - Aucune idée, en fait... C'est un bug, les restes de ma essayer de trouver de projection et de MV paramètres qui fonctionnent réellement. Corrigé, merci.
Vous devez vous connecter pour publier un commentaire.
Ne pas appeler updateGL() de votre minuterie d'appel de mise à jour() au lieu de s'assurer que la vue est un événement de peinture.
paintGL()
n'est pas appelée à tous, alors. Essayé d'appeler à la fois, trop - aussi ne fonctionne pas. Mais merci pour l'astuce.à l'intérieur de votre CGLWidget constructeur
jouer avec la VALEUR 10 est juste un exemple.
Ornent
timer(0)
va tirer sur la minuterie immédiatement