[C++ Opengl]Un debutant opengl n'affiche pas ce qu'il veut

Un debutant opengl n'affiche pas ce qu'il veut [C++ Opengl] - C++ - Programmation

Marsh Posté le 03-06-2005 à 13:46:00    

je debute l'opengl, et j'ai suivis un tutorial vu sur Games Creators Network...
 
bien sur en suivant le tuto tout marche tres bien (et c'est bien explique, aucuns problemes) mais je n'arrive pas a faire exactement ce que je veut ensuite.
Le but du tuto etait au final de creer un cube immobile au centre et deux satellites identiques mis a l'echelle...
voici le code de positionnement des differents cubes :  
 

Code :
  1. glCallList(id_cube);         //dessine le cube 1   (petit)
  2.      glPushMatrix();
  3.      glRotated(angle,0,1,0);      //rotation
  4.      glTranslatef(0,0,-5);        //translation
  5.      glScaled(0.5,0.5,0.5);       //mise a echelle
  6.    
  7.      glCallList(id_cube); // cube 2
  8.      glPopMatrix();
  9.      glPushMatrix();
  10.      glRotated(angle,0,1,0);
  11.      glTranslatef(0,0,5);
  12.      glRotated(angle,0,1,0);
  13.      glScaled(0.5,0.5,0.5);
  14.    
  15.      //buggé a mort
  16.      glCallList(id_cube); // cube 3
  17.      glPopMatrix();
  18.      glPushMatrix();
  19.      glRotated(angle/3,1,0,0);
  20.      glTranslatef(0,5,0);
  21.      glRotated(angle/4,1,3,1);
  22.      glScaled(0.5,0.5,0.5);
  23.    
  24.    
  25.      glPopMatrix();
  26.    
  27.      glutSwapBuffers();


 
tout va tres bien, sauf que comme ca le cube trois est immobile (! alors que je lui fais faire une rotation (et une mise a echelle, juste pour bien voir qu'il ne se passe rien)
si j'ajoute, juste avant le dernier glPopMatrix() un glCallList(id_cube), j'ai bien un cube qui s'affiche (et qui tourne) - bien sur on ne le voit que si j'enleve la mise a echelle, sinon on le voit pas il est dans le cube immobile - mais il s'affiche au dessus du precedent, toujours aussi immobile
 
j'ai pas du bien comprendre comment il fallait faire, ca doit pourtant pas etre bien complique  :??:  
 
sinon j'ai un autre petit probleme : je n'arrive pas a lancer la fenetre en plein ecran...
 

Code :
  1. glutInit(& argc, argv);   //transfert a glut les param. d'init.
  2.      glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);    //mise en place des parametres de la fenetre, simple tampon
  3.      //glutFullScreen();            //cree une fen. plein ecran
  4.    
  5.      glutInitWindowSize(width, height); //taille et pos. de la fenetre
  6.      glutInitWindowPosition(50, 50);
  7.    
  8.      //id_cube=glGenLists(1); // ici, on a besoin que d'une liste
  9.      glutCreateWindow("Fenetre OpenGL" ); 
  10.      Init();           //appelle le test Z-buffer  
  11.      Reshape(width, height);


 
ici le code de ma creation de fenetre, bah si j'enleve les initwindowsize et position, que je fais un reshape avec les bon width/height à la defnition de mon ecran, ca plante  :cry:  
 
comment creer une fenetre en plein ecran???
 
merci pour tout!!!  :wahoo:


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 03-06-2005 à 13:46:00   

Reply

Marsh Posté le 03-06-2005 à 14:40:40    

tu fais tes transformations après l'affichage toi ?

Reply

Marsh Posté le 03-06-2005 à 17:51:25    

Citation :

tu fais tes transformations après l'affichage toi ?


 
non pourquoi??? j'ai bien mon inversion de buffer apres les transformation???
et si c'est pour mon code de creation de fenetre, evidemment ce bout la est place avant  :lol: je l'ai place apres parce que ce n'est pas ma priorite pour le moment ;-)


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 03-06-2005 à 18:14:44    

guepe a écrit :

Citation :

tu fais tes transformations après l'affichage toi ?


 
non pourquoi??? j'ai bien mon inversion de buffer apres les transformation???
et si c'est pour mon code de creation de fenetre, evidemment ce bout la est place avant  :lol: je l'ai place apres parce que ce n'est pas ma priorite pour le moment ;-)


 
il veut dire que tu dois faire tes transformation avant l'affichage du cube.
 

Code :
  1. // dessin du cube  1
  2. 1. transformations (rotate, translate, scale...)
  3. 2. glCallList(id_cube);
  4. // dessin du cube  2
  5. 1. transformations (rotate, translate, scale...)
  6. 2. glCallList(id_cube);
  7. ...


Message édité par jerem38 le 03-06-2005 à 18:15:17
Reply

Marsh Posté le 03-06-2005 à 18:25:40    

Citation :

il veut dire que tu dois faire tes transformation avant l'affichage du cube.


ahhh.. j'avour que j'ai copie le tuto, et comme tel quel ca marchait.. je ne comprenais pas ..
 
bon je cours tester comme ca!


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 03-06-2005 à 18:27:14    

   *      glPushMatrix();
    *      glRotated(angle,0,1,0);      //rotation
    *      glTranslatef(0,0,-5);        //translation
    *      glScaled(0.5,0.5,0.5);       //mise a echelle
    *      glCallList(id_cube);         //dessine le cube 1    
    *      glPopMatrix();
    *  
    *      glPushMatrix();
    *      glRotated(angle,0,1,0);
    *      glTranslatef(0,0,5);
    *      glRotated(angle,0,1,0);
    *      glScaled(0.5,0.5,0.5);    
    *      glCallList(id_cube); // cube 2
    *      glPopMatrix();
    *      
    *      //buggé a mort
    *      glPushMatrix();
    *      glRotated(angle/3,1,0,0);
    *      glTranslatef(0,5,0);
    *      glRotated(angle/4,1,3,1);
    *      glScaled(0.5,0.5,0.5);
    *      glCallList(id_cube); // cube 3
    *      glPopMatrix();
    *      
    *      glutSwapBuffers();
 
 
et pour le plein écran je sais pas j'utilise pas glut moi :)

Reply

Marsh Posté le 03-06-2005 à 18:28:19    

bon et bien je vous remercie infiniment.... ca marche "au poil" maintenant !! yaisse!
 
par contre personne en ce qui concerne mon petit probleme de "fullscreen"???
 
[edit]

Citation :

et pour le plein écran je sais pas j'utilise pas glut moi :)


 
ils utilisent ca dans le tuto...
Quels sont exactement les avantages/inconvenients de glut??
 
bon les avantages, deja cela me parait plus simple, plus rapide d'utiliser opengl... mais les inconvenients? d'autres avantages??
 
plein de questions je sais, mais lorsque l'on debute dans une si grosse librairie... forcement ;-)...
 
merci encore


Message édité par guepe le 03-06-2005 à 18:30:24

---------------
Un blog qu'il est bien
Reply

Marsh Posté le 05-06-2005 à 21:07:17    

essai la routine suivante :
 
void glutFullScreen(void);
 
donc tu tapes dans ton main juste après l'initialisation de GLUT :
 

Code :
  1. glutFullScreen();


 
et ça devrait être bon  ;)


Message édité par prophet-pro le 05-06-2005 à 21:07:31
Reply

Marsh Posté le 05-06-2005 à 21:08:57    

d'ailleurs j'viens de rémarquer que c'était indiqué dans ton code : suffit de décommenter la ligne !!!!!

Reply

Marsh Posté le 06-06-2005 à 08:11:13    

Citation :

d'ailleurs j'viens de rémarquer que c'était indiqué dans ton code : suffit de décommenter la ligne !!!!!


 
oui mais en decommentant cete ligne ca plante...
en fait, si je place cette ligne plus bas, apres la creation de la fentre, cela fonctionne donc maintenant je suis en fullscreen ;-) cool!
 
merci pour tout!


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 06-06-2005 à 08:11:13   

Reply

Marsh Posté le 06-06-2005 à 11:37:36    

Citation :

comment creer une fenetre en plein ecran???


 
A part le glutFullScreen(), il existe une autre fonction (non documentée dans glut) qui est beacoup plus performante: glutEnterGameMode()

Reply

Marsh Posté le 06-06-2005 à 17:40:33    

tiens je vais essayer ca !


---------------
Un blog qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed