Bonjour tous,
je voudrais savoir juste un petit truc:
=> comment met on à jour l'affichage lorsqu'on a changé quelque chose?
je croyais que c'etait: "udateGL" mais ça ne marche pas...
je vous remercie d'avance
Version imprimable
Bonjour tous,
je voudrais savoir juste un petit truc:
=> comment met on à jour l'affichage lorsqu'on a changé quelque chose?
je croyais que c'etait: "udateGL" mais ça ne marche pas...
je vous remercie d'avance
C'est bien updateGL() => qui fait appelle à glDraw() qui lui même fait appelle à paintGL().
updateGL()
Updates the widget by calling glDraw().
glDraw()
Executes the virtual function paintGL().
The widget's rendering context will become the current context and initializeGL() will be called if it hasn't already been called.
paintGL()
This virtual function is called whenever the widget needs to be painted. Reimplement it in a subclass.
There is no need to call makeCurrent() because this has already been done when this function is called.
Donc dans ton programme tu as un initializeGL() où tu fais toute tes initialisations et après tu mets tes commandes de dessin dans paintGL() qui sera appelé à chaque fois que tu feras appelle à updateGL().
Oui, la fonction paintGl sera automatiquement appelé par updateGL.
En pratique, il faut initialiser dans le constructeur (pour les initialisations qui n'ont pas besoin d'un context OpenGL valide) ou dans initializeGL (pour les initialisations qui ont besoin d'un contexte OpenGL), le code de rendu dans paintGl et mettre updateGL dans chaque fonction qui modifie la vue 3D (events clavier et souris, timer pour faire des animations, etc.)
A relire (ou lire) : Utilisation avancée des processeurs graphiques avec Qt
merci de votre aide
A+
en fait mon probleme n'est pas resolu :aie:
=> j'ai remarqué que ma figure se mettais bien à jour mais c'est l'affichage qui ne se fait pas.
En fait mon programme fonctionne très bien lorsque je fais bouger la fenetre, ceci permet de mettre à jour le screen.
=> comment puis je faire automatiquement ? en fait je voudrais que cela se fasse à chaque fois que l'on passe dans la fonction paintGL()
merci d'avance
Il y a de forte chance que tu fasses pas un updateGL() a un endroit où il faudrait ou alors ton code dans paintGL() n'est pas bon etc... Je doute que cela vienne de Qt puisque j'en utilise en ce moment et je n'ai aucun soucis de ce côté là. Si il faut poste un peu de code que l'on puisse regarder de plus près ;)
j'ai trouvé le probleme mais je ne sais pas comment le resoudre.
1°) j'ai fait une fenetre principale où j'ai mis deux fenetre dont une openGL:
c'est donc ici que mon widget de type GL est réaliséCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 FenPrincipale::FenPrincipale() { fenetres (mode MDI) QMdiArea *zoneCentrale = new QMdiArea; zoneCentrale->setBackground(arrierePlan); centrale MyMainWindow *plotFenetre1 = new MyMainWindow; QMdiSubWindow *sousFenetre1 = zoneCentrale->addSubWindow(plotFenetre1); myGLWidget *plotFenetre2 = new myGLWidget; QMdiSubWindow *sousFenetre2 = zoneCentrale->addSubWindow(plotFenetre2); setCentralWidget(zoneCentrale); }
donc si je veux appeler une methode qui utiliseGL il y a deux façon:
=> soit dans ce constructeur je fait:
avec update une methode qui contient updateGL();Code:myGLWidget->update();
=> soit je modifie la fenetre et alors ça va mettre à jour le widget.
2°) ces deux choses fonctionnent mais je voudrais à présent appeler updateGL d'une autre façon
=> il faudrait que je fasse une methode dans ma class GLWidget qui contienne updateGL() et qui soit appelé à l'intérieur de cette classe mais je ne sais pas comment faire
comment puis je appeler une methode de la ma classe sans passer par:
?Code:objetGLWidget->update();