OpenGL/TP numéro 1 : chaîne de transformation
Frédéric Devernay (devernay@istar.fr)
Introduction
Dans ce premier TD, vous allez d'abord apprendre à compiler un programme
OpenGL simple. Pendant le reste du TD, vous modifierez peu à
peu ce programme pour inclure des fonctions de manipulation d'objet et
de caméra.
Le sujet du TD est essentiellement la chaîne de transformation
(transformation
pipeline) nous laisserons donc de côté les fonctions de
rendu pour nous intéresser uniquement aux fonctions de transformation
géométrique.
Compilation
-
Recopiez chez vous les fichiers Makefile, dino.c,
robot.c,
planet.c.
-
Éditez le Makefile pour l'adapter à l'installation locale
de Mesa/OpenGL.
-
Compilez et exécutez les programmes dino, robot et planet.
-
Allez voir dans les sources robot et planet quelles touches permettent
de les manipuler, essayez-les.
Le reste du TD consiste à augmenter le programme dino de nouvelles
fonctionnalités.
Examen du source existant
Observez le source de dino, robot et planet, en commençant par main(),
pour en comprendre le fonctionnement grossier : on définit des callbacks
sur les évènements clavier, souris et des menus, puis on
initialise la géométrie et on lance la boucle d'évènements.
Observez l'utilisation des fonctions liées à la chaîne
de transformation :
-
glMatrixMode
-
gluPerspective
-
gluLookAt
-
glPushMatrix
-
glPopMatrix
-
glRotatef
-
glTranslatef
Mouvements du modèle
Pour l'instant, le programme permet de bouger l'animal de droite à
gauche en utilisant les flèches droite et gauche ou la souris.
-
Ajoutez la possibilité le le faire bouger de haut en bas (rotation
autour de l'axe X).
-
Ajoutez la possibilité de le faire aller devant / derrière
/ à droite / à gauche, en utilisant la touche shift (cf glutGetModifiers).
-
La fonctionnalité Reset du menu doit fonctionner.
-
Faites en sorte que quand on le déplace vers la gauche il lève
le bras droit et que quand on le déplace vers l'avant il lève
le bras gauche. Les bras doivent tourner autour de leur axe ! Il vous faudra
modifier la fonction makeDinosaur, et appeler
makeDinosaur depuis redraw()
à chaque fois que la position des bras change.
Mouvements de la caméra
-
Réécrivez toutes les fonctionnalités précédentes
pour que ce soit l'observateur qui bouge en appuyant sur control
(rotation ou translation selon l'état de la touche shift).
-
Comparez les effets des deux transformations.
-
Le Reset doit encore fonctionner.
Références