rotation en opengl ac les fleches

rotation en opengl ac les fleches - C++ - Programmation

Marsh Posté le 22-12-2004 à 00:25:11    

voici mon pb
j'ai declarer un cube jusque la tt va bien
mais je ve le faire tourner grace au fleches
donc je met
 
void Fleches(int key, int x, int y)
{
switch (key)
{
case GLUT_KEY_UP : glRotatef(5,1,0,0);break;
case GLUT_KEY_DOWN : glRotatef(-5,1,0,0);break;
}
 
}
 
et glutSpecialFunc(Fleches); dans le main
 
mais qd j'execute le prog le cube ne tourne pas
(code entier sur http://rafb.net/paste/results/ACRxDB29.html )
 
que faire ???  :fou:

Reply

Marsh Posté le 22-12-2004 à 00:25:11   

Reply

Marsh Posté le 22-12-2004 à 01:34:45    

ça ne fonctionne pas comme ça ;)
Rajoute une variable globale rotateAngle que tu incrémentes lorsque tu appuies sur la flèche du haut et décrémentes sur la flèche du bas.
 
Et ensuite dans ton code de rendu :  

Code :
  1. glMatrixMode(GL_MODELVIEW);
  2. glLoadIdentity();
  3. gluLookAt(4,3,3,0,0,0,0,1,0);
  4. glRotatef(rotateAngle, 1, 0, 0);


 

Reply

Marsh Posté le 22-12-2004 à 02:13:54    

bah j'ai donc essayer sa
void Fleches(int key, int x, int y)
{
     switch(key)
     {
     case GLUT_KEY_UP :
                           Angle++;
                           break;
     case GLUT_KEY_DOWN :
                         Angle--;
                         break;
     }
}
 
void Display()
{
 glClearColor(0,0,0,0);  
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 gluLookAt(4,3,3,0,0,0,0,1,0);
 glRotatef(Angle,1,0,0);
 
mais sans aucun resultat

Reply

Marsh Posté le 22-12-2004 à 02:53:42    

Je ne suis pas un expert de glut mais en testant ton code il s'est avéré évident qu'en fait il y avait un problème de rafraichissement. Appuies sur une flèche : rien ne bouge, redimensionne ta fenêtre : ton cube a tourné.
 
Il doit y avoir une raison derrière tout ça mais je n'ai pas envie de me plonger dans Glut à 3h du mat' :D en attendant si tu fais ça :

Code :
  1. void Fleches(int key, int x, int y)
  2. {
  3.      switch(key)
  4.      {
  5.      case GLUT_KEY_UP :
  6.                            Angle++;
  7.                            break;
  8.      case GLUT_KEY_DOWN :
  9.                          Angle--;
  10.                          break;
  11.      }
  12. Display();
  13. }


 
ça a l'air de fonctionner mais que ça ne t'empêche pas de chercher plus précisément ce qui pose problème.
 
Edit : Ok le mystère est résolu : tu es en single buffering et tu n'indiques jamais qu'il faut redessinner.
 
Passe en mode double buffering :  

Code :
  1. glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);


 
et rajoute à la fin de ta fonction de dessin  

Code :
  1. glutSwapBuffers();
  2. glutPostRedisplay();


Message édité par Zeross le 22-12-2004 à 03:13:24
Reply

Marsh Posté le 22-12-2004 à 18:08:49    

merci beacoup sa marche now

Reply

Sujets relatifs:

Leave a Replay

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