Vous êtes sur la page 1sur 8

Ralis par :

IMED

OpenGL

I. Prsentation :
OpenGL (Open Graphics Library) est une spcification qui dfinit une API multiplate-forme pour la conception d'applications gnrant des images 3D (mais galement 2D). OpenGL s'utilise principalement en C/C++.

1. Outils de dveloppement :
Les bibliothques OpenGL et les outils de dveloppement sont accessibles sous les diffrentes plateformes : WINDOWS, LINUX, MACOS Nous avons choisie lenvironnement LINUX (UBUNTU) car cest plus stable que lhabituel WINDOWS. Nous avons besoins des outils suivants : Un diteur de texte : gedit (exemple) Le compilateur du code c/c++ : gcc (GNU Compiler Collection) La bibliothque graphique OpenGL.

2. Prparation de lenvironnement :
Pour installer la bibliothque OpenGL sous ubuntu, on saisit la commande suivante dans le terminal :

sudo apt-get install freeglut3-dev

Pour compiler le code crite en langage C (exemple: fichier1.c) :

gcc -o exemple1 fichier1.c -lGLU lglut

Et pour excuter le code compil:

./exemple1

OpenGL

II. Travaux Pratique N1 :


1. Objectif :

Initialiser une fentre graphique pour des animations 3D. Grer les paramtres daffichage. Grer les vnements.

2. Exercice 1 :
Crer un programme hello.c avec cration dune fentre graphique pour des animations 3D. Tester. crer le fichier hello.c : gedit hello.c saisir le code suivant :

#include <GL/glut.h> /* variables globales : */ /* position de la fentre graphique dans lcran : */ GLushort pos_x_fenetre=100, pos_y_fenetre=100; /* dimensions de la fentre graphique : */

GLushort largeur_fenetre=400, hauteur_fenetre=400;

OpenGL
int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH); glutInitWindowPosition(pos_x_fenetre,pos_y_fenetre); glutInitWindowSize(largeur_fenetre,hauteur_fenetre); glutCreateWindow("hello"); glEnable(GL_DEPTH_TEST); glutMainLoop(); return 0; }

Compiler et excuter le code :

Ce qui nous donne la fentre suivante :

OpenGL

3. Exercice2 :
Ajouter au programme un vnement daffichage avec comme code pour effacer lcran. On ajoute le bout de code suivant :
.. . void Affichage(void ) { glClearColor(1,0,0,0); /* coefficients RGB + A de la couleur de fond */ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); /* effaage */ glutSwapBuffers(); /* Envoyer le buffer lcran */

void Clavier(unsigned char key, int x, int y) { switch (key) {

case 'q':
glutDisplayFunc(Affichage); default:break; } glutPostRedisplay(); /* rafrachissement de laffichage */ }

Et on intgre linstruction suivante dans la fonction main : glutKeyboardFunc(Clavier);

OpenGL

ce qui nous donne laperue suivant :

Et aprs lappui sur la touche q : Le contenue sera effac et remplac par la couleur rouge.

4. Exercice 3 :
Ajouter au programme des fonctions de gestion des vnements suivants : Enfoncement dune touche normale au clavier Enfoncement dune touche spciale au clavier Enfoncement ou relchement dun bouton de souris Mouvement de la souris. 5

OpenGL
GLint mousex, mousey; /* permet de mmoriser la dernire position de la souris */ GLfloat coef_g=0.5, coef_b=0.5; int leftButtonDown=0; void BougeSouris(int x, int y) { if (leftButtonDown==1) { coef_b += 0.01*(x-mousex); if(coef_b > 1) coef_b = 1; if(coef_b < 0) coef_b = 0; coef_g += 0.01*(y-mousey); if(coef_g > 1) coef_g = 1; if(coef_g < 0) coef_g = 0; mousex = x; /* enregistrement des nouvelles */ mousey = y; /* coordonnes de la souris */ } glClearColor(coef_b,coef_g,0,0); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glutSwapBuffers();
glutPostRedisplay(); }

OpenGL
void PresseBouton(int button, int state, int x, int y) { if (button==GLUT_LEFT_BUTTON) { if (state==GLUT_DOWN) { leftButtonDown = 1; mousex = x; /* mmorisation des coordonnes de la souris */ mousey = y; /* lorsquon enfonce le bouton gauche */ } if (state==GLUT_UP) { leftButtonDown = 0; } } glClearColor(mousex*0.01,coef_g*0.01,0,0); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glutSwapBuffers(); glutPostRedisplay(); }

Et on ajoute dans la fonction main : glutMouseFunc(PresseBouton); /* appel de glutMouseFunc */ glutMotionFunc(BougeSouris); /* appel de glutMotionFunc */ Le rsultat sera une fentre dont le contenue diffre selon les vnements : bouge souris avec appui bouton gauche, appui sur la touche q , appui bouton gauche de la souris.