125 1 767KB
Université de Khemis Miliana 3ème année Informatique
2016 / 2017 matière : infographie- opengl
Corrigé de l'Examen Final
20 20
Partie I): Question 1 (0.75 point): Quelle(s) librairie(s) ne fait (font) pas partie du monde opengl -Aux ☐ -Glu ☐ 0.75 -Glx ☐ -Tux ☐ X Question 2(0.75 point): La technique de Z buffer consiste à -Masquer une partie de l’image (masque de Zorro) ☐ -Remplissage d’une matrice écran ☐ X 0.75 -Une subdivision de segments ou faces se coupant ☐ -Remplir une zone en parcourant les pixels en Z ☐ Question 3(0.75 point):A quoi fait référence le A de GL_RGBA -A la valeur Ambiante ☐ -A indiquer que les couleurs sont en décimal ☐ 0.75 -A gérer les paramètres d’atténuation ☐ -A gérer le paramètre de transparence ☐ X Question 4(0.75 point): Cette image est caractéristique d’une :
☐ ☐ X ☐ X ☐
-Projection en perspective -Projection orthogonale -Projection parallèle -Projection symétrique
03 03
0.75
07
Partie II):
07
1 • Que signifie openGL ?(1point)
OpenGL est une librairie graphique 3D disponible sur de nombreuses plate-formes (portabilité) qui est devenu un standard en infographie. C’est un langage procédural (environ 200 fonctions) qui permet de donner des ordres de tracé de primitives graphiques 1 (segments, facettes, etc.) directement en 3D 2 • Que signifie glut ?(1point) OpenGL Utility Toolkit (GLUT)
1
Bibliothèque écrite pour rendre simple la programmation de petites applications dans le cadre d'interfaces graphiques interactives simples. 3 • Quelles sont les propriétés d’openGL ?(1point)
C’est une machine à états qui permet de définir un contexte de tracé : position de caméra, projection 2D, couleurs, lumières, matériaux... OpenGL se charge de faire les changements de repère, la projection à l'écran, le « clipping » (limites de visualisation), l'élimination des parties cachées, l'interpolation les couleurs, et de la « rasterisation » (tracer ligne à ligne) des faces pour en faire des pixels. 1 Fonctions de base pour l'affichage 3D en OpenGL: • Dessin de sommets, de segments de droite et de facettes • Matériaux et lumières • Transformations géométriques • Caméras • Textures • Gestion des paramètres de rendu • ...
Pas de fonction pour la construction d'une interface utilisateur (fenêtres, souris, clavier, gestionnaire d'événements, ...) -Préfixe des fonctions:gl -Librairie standard -En langage C, déclarations dans le fichier GL/gl.h 4 • Quelles sont les propriétés de glut ?(1point)
• Gestion d'une fenêtre d'affichage • Gestion de la souris • Gestion du clavier • ... Programmation événementielle • Gestion des menus • Gestion des environnements multifenêtrés • Existence de polices de caractères bitmap et vectorielles intégrées • Gestion de périphériques d'entrée supplémentaires 1 • ... plus grande puissance et mais plus grande complexité Préfixe des fonctions: glut Librairie non standard mais très couramment utilisée -Librairie non spécifique à un système d'exploitation -En langage C, déclarations dans le fichier GL/glut.h 5 • Que fait la fonction glEnable(GL_LIGHTING)?(1point)
Activation de la gestion des lumières et des matériaux,
1
6 • Que fait la fonction glOrtho(left, right, bottom, top, near ,far) ?(1point)
1
Pour la projection orthogonale appelée projection orthographique le volume de vue est un parallélépipède rectangle. Ainsi la taille des objets n’est pas influencée par la distance au point de vue.
7 • Que fait la fonction glMaterialfv (GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess)?(1point)
Permet de modifier les paramètres du matériau courant: la face arrière et avant, couleur 1 ambiante/diffuse/spéculaire, brillance,….. Exercice1 : Les matrices de transformation en coordonnées homogènes pour chaque type de transformation sont:
0 1 0 cos(ax) Rotation R1 0 sin(ax) 0 0 1 0 0 0 1 0 Translation T1 0 0 1 0 0 0
0 0 sin(ax) 0 cos(ax) 0 0 1 dx1 dy1 0.5 dz1 1
0.5
2.5 2.5
1 0 0 1 Translation T2 0 0 0 0 cos( ax) 0 Rotation R2 sin(ax) 0
0 dx 2 0 dy 2 0.5 1 dz 2 0 1 0 sin(ax) 0 1 0 0 0 cos(ax) 0 0 0 1
0.5
Matrice globale de transformation en coordonnées homogènes
cos(ax) 0 sin(ax) 0
0 sin(ax) 0 1 1 0 0 0 0 cos(ax) 0 0 0 0 1 0
0 0 dx 2 1 1 0 dy 2 0 0 1 dz 2 0 0 0 1 0
0.5
0 0 dx1 1 0 0 1 0 dy1 0 cos(ax) sin(ax) 0 1 dz1 0 sin(ax) cos(ax) 0 0 1 0 0 0
0 1 0 0 0 0 1 0
0 0 0 1 0 0 0 1 0 0 0 1
Exercice2 : 7.5 7.5
Pour ceci, on divisera la fusée en trois parties: un cylindre, un cône et les ailerons. Axe Y
axe Z
1.5 axe X/Y 3 20°
2
1
1
Axe X
Programme OpenGL #include #include 0.5 #include #include #include void init(void); void cylindre(float r, float h); void cone(float r, float h); void ailerons(float r, float h); void scene(void) ; void display(void); void reshape(int x,int y);
0.5
/* Variables et constantes globales */ static const float blanc[] = { 1.0F,1.0F,1.0F,1.0F }; static const float gris[] = { 0.7F,0.7F,0.7F,1.0F }; static int aff = 1; /* Fonction d'initialisation des parametres */ void init(void) { 0.5 const GLfloat mat_shininess[] = { 50.0 }; glMaterialfv(GL_FRONT,GL_SPECULAR,blanc); glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); glLightfv(GL_LIGHT0,GL_DIFFUSE,gris); glLightfv(GL_LIGHT1,GL_DIFFUSE,gris); glLightfv(GL_LIGHT2,GL_DIFFUSE,gris); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_LIGHT2); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_AUTO_NORMAL); } /* Scene de dessin d'un cylindre */ Void cylindre(float r,float h) { 1 glPushMatrix(); glBegin(GL_POLYGON); glColor3ub(255,0,0); //face rouge for(i=0,i