Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2741 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  problème d'OpenGL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème d'OpenGL

n°223665
peak
Posté le 04-10-2002 à 18:12:09  profilanswer
 

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... :  
 

Code :
  1. ... c'est juste ce bout ci ki nous interaisse; j'ai donc pas tout mis ...
  2. int OpenWindow(int argc, char** argv)
  3. {
  4. glutInit(&argc, argv);
  5. glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  6. glutInitWindowSize(600 , 600);
  7. glutInitWindowPosition(100 , 100);
  8. glutCreateWindow("Labyrinth" );
  9. init();
  10. glutDisplayFunc(display);
  11. glutMouseFunc(mouse);
  12. glutMainLoop();
  13. return 0;
  14. }
  15. int main(int argc, char** argv)
  16. {
  17.         cout << "1"<< endl;
  18. cout<<OpenWindow(argc, argv)<<endl;
  19.         cout << "2"
  20. return 0;
  21. }


 
ça compile, ouvre la fenetre OpenGL, fait ce k'y a à faire mais revien jamais à la fonction appelante  :heink:  
 
Pourkoi le "2" n'est jamais affiché??
Comment fair pour l'afficher??
 
thx!!
 :bounce:  
 

mood
Publicité
Posté le 04-10-2002 à 18:12:09  profilanswer
 

n°223674
peak
Posté le 04-10-2002 à 18:45:19  profilanswer
 

évidement après le 2y'a un ";"   :ange:  

n°223684
farib
Posté le 04-10-2002 à 19:03:42  profilanswer
 

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... :  
 

Code :
  1. ... c'est juste ce bout ci ki nous interaisse; j'ai donc pas tout mis ...
  2. int OpenWindow(int argc, char** argv)
  3. {
  4. glutInit(&argc, argv);
  5. glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  6. glutInitWindowSize(600 , 600);
  7. glutInitWindowPosition(100 , 100);
  8. glutCreateWindow("Labyrinth" );
  9. init();
  10. glutDisplayFunc(display);
  11. glutMouseFunc(mouse);
  12. glutMainLoop();
  13. return 0;
  14. }
  15. int main(int argc, char** argv)
  16. {
  17.         cout << "1"<< endl;
  18. cout<<OpenWindow(argc, argv)<<endl;
  19.         cout << "2"
  20. return 0;
  21. }


 
ça compile, ouvre la fenetre OpenGL, fait ce k'y a à faire mais revien jamais à la fonction appelante  :heink:  
 
Pourkoi le "2" n'est jamais affiché??
Comment fair pour l'afficher??
 
thx!!
 :bounce:  
 
 




 
 
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

n°223816
peak
Posté le 05-10-2002 à 00:50:23  profilanswer
 

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é!  

n°223829
koulip31
Posté le 05-10-2002 à 01:26:09  profilanswer
 

Glu main loop en tres gros c'est egal a  
 
while(1)
;  
 

n°223851
farib
Posté le 05-10-2002 à 08:27:03  profilanswer
 

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"
 

n°223934
peak
Posté le 05-10-2002 à 14:44:54  profilanswer
 

ok, je vois! :D  
Mais comment je fait pour sortir de la fonction???

n°224000
farib
Posté le 05-10-2002 à 20:04:53  profilanswer
 

ducon, t'en sort pas ! :D
 
t'as un évenement "OnExit"

n°224267
peak
Posté le 06-10-2002 à 19:25:42  profilanswer
 

OK, merci!!! :jap:  (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() :heink: )  :??:  
 

n°224299
farib
Posté le 06-10-2002 à 21:52:11  profilanswer
 

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

mood
Publicité
Posté le 06-10-2002 à 21:52:11  profilanswer
 

n°225230
peak
Posté le 08-10-2002 à 18:55:08  profilanswer
 

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())  
 

n°225256
farib
Posté le 08-10-2002 à 19:40:30  profilanswer
 

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

n°225644
peak
Posté le 09-10-2002 à 15:24:54  profilanswer
 

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!

n°225756
farib
Posté le 09-10-2002 à 16:53:36  profilanswer
 

le systeme il travaille evec des process, des threads au sein d'un mêm e programme.... po penser différemment

n°225902
Hercule
Posté le 09-10-2002 à 21:45:19  profilanswer
 

glutDisplayFunc(display);  
Normalement entre chaque affichage il doit passer dans la fonction "display"
 
 

Code :
  1. void display(void)
  2. {
  3. //fait tes calcul ici et tes input
  4. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  5. //dessine en opengl
  6. glFlush(); //affiche tout
  7. }


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°225937
farib
Posté le 09-10-2002 à 22:58:19  profilanswer
 

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

n°226002
Hercule
Posté le 10-10-2002 à 08:18:28  profilanswer
 

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.


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°226078
MC
retour à la raison
Posté le 10-10-2002 à 11:02:43  profilanswer
 

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é.


---------------
Kiss the boot of shiny, shiny leather...
n°226092
Rasthor
Posté le 10-10-2002 à 11:25:46  profilanswer
 

Petite question en passant:
 
on peut trouver des livres ou des cours online sur OpenGL ?

n°226120
farib
Posté le 10-10-2002 à 12:16:49  profilanswer
 

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"


Message édité par farib le 10-10-2002 à 12:17:56
n°226528
LeGreg
Posté le 11-10-2002 à 04:10:54  profilanswer
 

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

n°226547
farib
Posté le 11-10-2002 à 08:58:56  profilanswer
 

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

n°226550
Hercule
Posté le 11-10-2002 à 09:10:11  profilanswer
 

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.


Message édité par Hercule le 11-10-2002 à 09:12:45

---------------
Ils veulent la jouer hard, on va la jouer hard  
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  problème d'OpenGL

 

Sujets relatifs
[opengl] probleme de texture[opengl] probleme avec la fonction glcolor3d
Probleme OPENGL , affichage des couleurs en non transparence[sivouplé] [opengl] aidez moi à régler mon p'tit problème de géométrie
[OPENGL] reaction matiere/lumiere probleme de scaleProbleme C++ OpenGL/Glut
probleme de compilation opengl sous linux[C++] Problème OpenGL
problème, les focntions opengl me donnent unresolved external symbol[GLUT/OPENGL/C++]Probleme de perfomance, c normal
Plus de sujets relatifs à : problème d'OpenGL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR