Animation d'un cercle avec touches + film[2d][devc++4][glut]

Description

haut: o
bas : l
gauche : k
droite : m

agrandir : h
rétrécir : b

Quitter : q
Animer : c

Fait par Matthias RENAULT avec Dev C++4
matthias.renault@voila.fr
Nécessite GLUT
Glut.dll fourni

Source / Exemple :


//Les librairies
#include <gl/glut.h>
#include <math.h>

//on déclare les procédures
void display(void);
void init(void);
void film();
void indispensable();

//on déclare la fonction pour le cercle
void cercles(int x, int y, int rayon2);

//On déclare les variables
bool choix = false;                //boolenne

int rayon[100];
int xa[100];                    //entière avec tableau : la 1ere "case" de xa vaut 50
int ya[100];

int i = 1;                   //i détermine combien de fois on a appuyé sur une touche

float linex = 0.5;                 //à virgule flottante
float liney = 0.5;
float theta = 0.0f;

void display (void)
{
   glClear(GL_COLOR_BUFFER_BIT);
   if (!choix)
   {
     glBegin(GL_LINES);
     glColor3f (1.0, 0.0, 0.0);
     glVertex2f (linex - 0.01, liney);
     glVertex2f (linex + 0.01, liney);
     glVertex2f (linex, liney + 0.01);
     glVertex2f (linex, liney - 0.01);
     glEnd();
     cercles (xa[i], ya[i], rayon[i]);      //on trace le cercle
   }

   if (choix == true)
   {
     cercles (xa[i], ya[i], rayon[i]);      //on trace le cercle
   }
   glFlush();

   //On a deja fait le cercle
   choix = true;

}

//Toute la gestion alphanumérique
void keyboard(unsigned char key, int x, int y)
{
   switch (key)
   {

     case 'q':                            //quitter
     exit(0);
     break;

     case 'h':                            //cercle + grand
     rayon[i]++;
     indispensable();
     glutPostRedisplay();
     break;

     case 'b':                            //cercle + petit
     rayon[i]--;
     indispensable();
     glutPostRedisplay();
     break;

     case 'o':                            //on monte
     ya[i]--;
     indispensable();
     glutPostRedisplay();
     break;
                                         //on descend
     case 'l':
     ya[i]++;
     indispensable();
     glutPostRedisplay();
     break;

     case 'k':                           //à gauche
     xa[i]--;
     indispensable();
     glutPostRedisplay();
     break;

     case 'm':                           //à droite...
     xa[i]++;
     indispensable();
     glutPostRedisplay();
     break;
                                         //on lance le "film"!
     case 'c':
     film();
     break;

     default:                           //si rien, on retourne au début!
     break;
    }
}

void film()
{
  int a;       //le compteur
  for (a = 1; a <= i; a++)
  {
    glClear(GL_COLOR_BUFFER_BIT);
    cercles (xa[a], ya[a], rayon[a]);
  }
}

void indispensable()
{
  xa[i+1] = xa[i];
  ya[i+1] = ya[i];
  rayon[i+1] = rayon[i];
  i++;
}

//initiation perso...
void init(void)
{
   //on initialise les variables
   rayon[1] = 10;
   xa[1] = 50;
   ya[1] = 50;
   glClearColor(0.0, 0.0, 0.0, 0.0);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(0, 100, 100, 0, -100, 100);
}

//Histoire d'initier...
int main (int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
   glutInitWindowSize(600,600);
   glutInitWindowPosition(100, 100);
   glutCreateWindow("Cercles");
   init();
   glutDisplayFunc(display);
   glutKeyboardFunc(keyboard);
   glutMainLoop();
   return 0;
}

//La fonction du cercle KITU!!!
void cercles (int x, int y, int rayon2)
{
   int theta = 0;
   glBegin(GL_POINTS);
   while (theta <= 360)
      {
        glVertex2f (x + rayon2 * (cos(theta)), y + rayon2 * (sin(theta)));        //la fonction du cercle
        theta++;
      }
      glEnd();
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.