problème d'OpenGL - C++ - Programmation
Marsh Posté le 04-10-2002 à 19:03:42
peak a écrit a écrit : Y'a un truc ke je capte vraiment pas avec l'OpenGL c'est ce ke fait "glutMainLoop" Je pense ke si k'el k'un répond à la kestion ki suit, il m'éclairera deja pas mal... :
|
glutmainloop, c'est le main ;-)
en fait dans glutmainloop, ca regarde la file des messages du systemes d'exploitation et ca agit en conséquence
Marsh Posté le 05-10-2002 à 00:50:23
hum, y'aurai moyen d'être un peu plus precis??
"regarde la file des messages du systemes d'exploitation et agit en conséquence"
-La fille des messages du systemes d'exploitation. càd??
-Agit en conséquence. comment? type de message->conséquence? (...exemples...)
-Comment afficher le "2"??????????????????
c'est cool de répondre; merci!
mais je suis pas plus avancé!
Marsh Posté le 05-10-2002 à 08:27:03
en gros quand tu appuye sur le clavier, bouges la souris, redimensionne la fenetre, donne le focus a la fenetre, etc, windows (ou tout systeme d'exploitation, pusique glu c'est portable) génere des messages, qu'il transmet à l'application concernée.
gluMainloop regarde cette pile
gluDisplayFunc et gluMousFunc en fait ca correspond au des poiteurs de fonctions, qui seront appelées quand "détectées" dans les messages du systeme d'exploitation...
si tu as fais du javascript, gluMouseFunc, ca correspond à "onMousequesquechose"
Marsh Posté le 05-10-2002 à 14:44:54
ok, je vois!
Mais comment je fait pour sortir de la fonction???
Marsh Posté le 06-10-2002 à 19:25:42
OK, merci!!! (même si ça m'arrange pô...)
En fait mon prob c'est ke je voudrai afficher des resultats d'un algo. dans une fenetre OpenGL et une fois ces resultats affiché continuer à executer mon algo.
Est-ce k'y a une solution? (aller tapper mon code dans le while(1) de glutMainLoop() )
Marsh Posté le 06-10-2002 à 21:52:11
tu voudrais que ta fenetre affiche le résultat d'un algo ?
en fait ca dépend de ce qu'est l'algo et quel affichage tu en fait
Marsh Posté le 08-10-2002 à 18:55:08
En fait ce ke j'ai essayé de faire c'est sindé mon algo. en étape de manière à ce ke les resultats soient:
calculé(avec éventuellement des I/O (p.e.: cin>> cout<< ) - renvoyés(vers la fonction appelante- ki elle rappelera une fonction pour afficher les resultats(en OpengGL)-revenire dans fct appelante - réappeler algo() - recalculer - ........
mais comme je sais pas kitter la fonction glutMainLoop() pas moyen de revenir à ma fonction appelante pas moyen de refaire des cin>> cout<<
(à la base; j'aurai aimé calculer tout d'un coup tout en affichant ((cin>> cout<< ) + OpenGL) =>(void algo())
Marsh Posté le 08-10-2002 à 19:40:30
il faut que tu comprennes qu'on travaille avec un systeme d'exploitation qui détecte des évènement, et que l'affichage est géré indifféremment du reste de ton programme
Marsh Posté le 09-10-2002 à 15:24:54
ok, en fait je croit ke c'est justement ça ki me pose problème; j'ai trop l'habitude des algo. itératif...
Je croit ke j'ai plus ou moins capté
thx!
Marsh Posté le 09-10-2002 à 16:53:36
le systeme il travaille evec des process, des threads au sein d'un mêm e programme.... po penser différemment
Marsh Posté le 09-10-2002 à 21:45:19
glutDisplayFunc(display);
Normalement entre chaque affichage il doit passer dans la fonction "display"
Code :
|
Marsh Posté le 09-10-2002 à 22:58:19
oui, mais...
glutDisplayFunc(display);
ca c le systeme qui l'appelle quand il dessine la fenetre.
si on met des calculs, ca doit etre des "petits calculs" nécéssaire a l'affichage
Marsh Posté le 10-10-2002 à 08:18:28
si c'est entre les affichages pil poil ,il n'y a que ca,
sinon il y a glutIdleFunc(idle) qui s'execute en permanence.
Marsh Posté le 10-10-2002 à 11:02:43
y'a aussi les timers si je me souviens bien. Mais le truc c'est effectivement de tout mettre dans la fonction idle avec un test du temps passé.
Marsh Posté le 10-10-2002 à 11:25:46
Petite question en passant:
on peut trouver des livres ou des cours online sur OpenGL ?
Marsh Posté le 10-10-2002 à 12:16:49
la tu te boulaytises.....
www.google.fr
masi attention, la on parle de glu, c'est pas tellement de l'opengl, masi plus de la "programmation systeme"
Marsh Posté le 11-10-2002 à 04:10:54
Hercule a écrit a écrit : si c'est entre les affichages pil poil ,il n'y a que ca, sinon il y a glutIdleFunc(idle) qui s'execute en permanence. |
en fait il ne s'execute pas en permanence seulement
quand l'appli est idle. (ie pas de messages dans la file des messages). Ce qui fait qu'il peut etre "affame", c'est a dire ne pas avoir de temps pour s'executer pendant un temps certain surtout si tes autres appels de fonction sont gros.
De plus comme il s'execute dans le thread principal (comme toutes les autres foncions), il est indispensable qu'il retourne rapidement (pas de gros calculs), ou l'application semblera ne pas repondre a windows.
POur faire des gros calculs et continuer a gerer l'affichage, il faut soit reussir a decouper le calcul en morceaux micro-gerables, soit le faire tourner dans un thread separe et laisser le systeme d'exploitation ou le systeme de thread gerer la repartition du temps.
Ceci dit je ne vois pas encore trop ce que tu veux faire.
LeGreg
Marsh Posté le 11-10-2002 à 08:58:56
legreg a écrit a écrit : en fait il ne s'execute pas en permanence seulement quand l'appli est idle. (ie pas de messages dans la file des messages). Ce qui fait qu'il peut etre "affame", c'est a dire ne pas avoir de temps pour s'executer pendant un temps certain surtout si tes autres appels de fonction sont gros. De plus comme il s'execute dans le thread principal (comme toutes les autres foncions), il est indispensable qu'il retourne rapidement (pas de gros calculs), ou l'application semblera ne pas repondre a windows. POur faire des gros calculs et continuer a gerer l'affichage, il faut soit reussir a decouper le calcul en morceaux micro-gerables, soit le faire tourner dans un thread separe et laisser le systeme d'exploitation ou le systeme de thread gerer la repartition du temps. Ceci dit je ne vois pas encore trop ce que tu veux faire. LeGreg |
+1
Marsh Posté le 11-10-2002 à 09:10:11
S'il arrive à être affamé, c'est que t'as un problème autre part...
Par contre qu'il affame, ca c'est certain, et dans notre cas, ca a pas d'importance.
"calculé(avec éventuellement des I/O (p.e.: cin>> cout<< ) - renvoyés(vers la fonction appelante- ki elle rappelera une fonction pour afficher les resultats(en
OpengGL)-revenire dans fct appelante - réappeler algo() - recalculer - ........
Tu met ta fonction dans display (et idle ca marche aussi), et tout va bien, mais ca n'aller pas pour certains.
Si pour toi la solution thread, parait plus simple pour un débutant ...
Qu'il fasse dans display si ca marche, il peut toujours l'améliorer après, mais si c'est juste une image fixe type graphique, c'est exactement ce qu'il faut.
Marsh Posté le 04-10-2002 à 18:12:09
Y'a un truc ke je capte vraiment pas avec l'OpenGL c'est ce ke fait "glutMainLoop"
Je pense ke si k'el k'un répond à la kestion ki suit, il m'éclairera deja pas mal... :
ça compile, ouvre la fenetre OpenGL, fait ce k'y a à faire mais revien jamais à la fonction appelante
Pourkoi le "2" n'est jamais affiché??
Comment fair pour l'afficher??
thx!!