PROTOTYPE D’UN PROGRAMME ÉCRIT EN C++ BASÉ SUR OPENGL #include <windows.h> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> #include <GL/glaux.h> #include "Triangle_3D.h" #include "Couleur_RVB.h" typedef enum {sommets, contour, surface} Mode_d_affichage; void Afficher(Triangle_3D T, Mode_d_affichage M, Couleur_RVB C);
void Initialisation(void) { /* Permet d'initialiser la couleur de fond RVB. Le 4ième paramètre permettra de fixer le niveau de transparence.*/ glClearColor(0.0, 0.0, 0.0, 0.0); /* Permet de fixer les 3 composantes réelles de la couleur d'affichage. Elle demeure inchangée tant que ses attributs ne sont pas modifiés. */ glColor3f(1.0, 0.0, 0.0); /* OpenGL possèdent 2 matrices, MODELVIEW et PROJECTION pour représenter respectivement les transformations ponctuelles et les transformations visuelles courantes. On opte ici pour la matrice de projection. */ glMatrixMode(GL_PROJECTION);
/* Permet d'initialiser la matrice de transformation courante soit, la matrice de projection dans ce cas-ci à la matrice identité. */ glLoadIdentity(); /* Permet de spécifier une projection orthographique où le volume de visionnement est un parallélépipède. La signification des paramètres est : gauche, droite, bas, haut, proche et loin. */ glOrtho(0.0, 800.0, 0.0, 500.0, -1.0, 1.0); /* La matrice de transformation courante devient la matrice de transformation visuelle. */ glMatrixMode(GL_MODELVIEW); }
void Affichage_Triangle( void ) { Point_3D A(200, 100, 0); Point_3D B(100, 200, 0); Point_3D C(100, 100, 0); Triangle_3D T1(A, B, C); A[1] += 100; A[2] += 100; B[1] += 100; B[2] += 100; C[1] += 100; C[2] += 100; Triangle_3D T2(A, B, C); C[1] += 100; C[2] += 100; Triangle_3D T3(A, B, C); /* Permet d'effacer l'écran en utilisant la couleur de fond. */ glClear(GL_COLOR_BUFFER_BIT); Couleur_RVB C1(1, 0, 0); Afficher(T1, sommets, C1); Couleur_RVB C2(0, 1, 0); Afficher(T2, contour, C2); Couleur_RVB C3(0, 0, 1); Afficher(T3, surface, C3); /* Permet de s'assurer que l'exécution des primitives d'affichage est complétée. */ glFlush(); }
void main(int argc, char** argv) { /* Permet d'initialiser des paramètres de certains utilitaires d'OpenGL. */ glutInit(&argc, argv); /* Permet de fixer les modalités d'affichage à l'écran. Les couleurs seront spécifiées à partir de 3 composantes rouge, vert et bleu. */ glutInitDisplayMode (GLUT_RGB); /* Permet de fixer la dimension de la fenêtre à l'écran soit, 800 pixels de largeur par 500 de hauteur. */ glutInitWindowSize(800, 500); /* Permet de fixer la position du coin supérieur gauche de la fenêtre. */ glutInitWindowPosition(500, 100);
/* Permet de créer une fenêtre avec comme titre celui passé en paramètre. Les paramètres de cette fenêtre doivent avoir été fixés au préalable. */ glutCreateWindow("Affichage de triangles"); /* Nous devons placer dans la fonction en paramètre les primitives d'affichage; celle-ci sera exécutée quand la fenêtre est créée. Cette fonction sera aussi appelée si le système de gestion des fenêtres détermine que la fenêtre d'OpenGL a besoin d'être réaffichée. */ glutDisplayFunc(Affichage_Triangle); /* Permet d'initialiser les paramètres de visionnement et les attributs d'OpenGL. */ Initialisation(); /* Permet de conserver l'image produite à l'écran. Le programme exécuté est mis en attente, l'image affichée à l'écran. */ glutMainLoop(); }
void Afficher(Triangle_3D T, Mode_d_affichage M, Couleur_RVB C) { glColor3f(C[1], C[2], C[3]); if (M == sommets) { glBegin(GL_POINTS); glVertex3f(T[1][1], T[1][2], T[1][3]); glVertex3f(T[2][1], T[2][2], T[2][3]); glVertex3f(T[3][1], T[3][2], T[3][3]); glEnd(); } else if (M == contour) { glBegin(GL_LINE_LOOP); { glBegin(GL_POLYGON); }