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

Soyez le premier à donner votre avis sur cette source.

Vue 6 800 fois - Téléchargée 315 fois

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

Ajouter un commentaire

Commentaires

Messages postés
71
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
24 juin 2019

Je viens de recompiler avec Borland C++ 5.02 Très bon ça fonctionne parfaitement exepter pour FILM. Je regarderais plus tard
Messages postés
455
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
18 décembre 2003

papi new year 2003 ;-)

pour utiliser exit(0) il ne faudrait pas <stdlib.h> par hasard ?
si void film(); void indispensable(); n'ont pas d'arguments formels un petit void fera l'affaire.
et une valeur de retour void return ; int return (la valeur)
true et false sont-ls définis quelque part dans <gl/glut.h> ?

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.