Exercice 1 : Compilation & Prise en main...
Nous allons partir d'un programme « chien, mouton, loup » résumant ce que vous avez fait
précédemment. Nous passerons de la vision 2D de cet univers à une vue 3D.
1. Téléchargez sur le site Internet http://igm.univ-mlv.fr/~biri/ , section Enseignement, L3info,
l'archive du code.
2. Allez dans le répertoire libg2x, et lancez la commande qmake (dans un terminal). Puis
lancez make. La bibliothèque devrait se compiler. Retournez dans le répertoire parent et
lancez la commande install_libgXd.sh. Puis lancez la compilation avec un make dans un
nouveau terminal.
3. Exécutez le programme créé. Vous devriez voir une « scène » constituée d'un repère et d'un
quadrilatère vert bizarrement placé (le sol). Certains touches agissent :
Touche 'i' Bascule entre notre vue 3D et la vue de la scène 2D du programme des
« chiens, moutons, loups ».
Barre d'espace Déclenche l'animation des agents (chien, moutons & loups).
Touche 'f' (en mode 3D). Zoom sur la partie centrale de la scène (pour affiner le
dessin de son chien – voir exercice 4).
4. En cliquant sur le bouton de gauche, prenez une image de votre environnement...
5. Étudiez spécifiquement le fichier main.cpp et plus particulièrement les fonctions initGL,
drawXXX, Dessin, keyPressXXX, et le main.
Exercice 2 : Ma première transformation
Pour utiliser des matrices, regardez le fichiers matrix4d.hpp dans le répertoire tools.
Nous allons commencer par effectuer une première transformation qui va permettre de mettre le sol
au centre du repère. Trouvez les transformations (une rotation & une translation) permettant de
positionner le centre du sol au centre du repère et sur le plan (xy). Le sol doit, à la fin, être à la
même position que le plan marron quand vous appuyer sur la touche 'i'.
Attention l'ordre des transformations est important. Pour vous en convaincre, inversez l'ordre de vos
transformation et observez le résultat.
Exercice 3 : Pour composer pleins de transformation
Les transformations d'objets dans une scène 3D peuvent s'effectuer grâce à une pile de matrice. La
matrice située en haut de la pile représente en général une composition (accumulation) de
nombreuses transformations. En effet chaque transformation que l'on ajoute modifie la matrice de
haut de pile. Or on va faire en sorte que cette matrice s'applique à toutes les coordonnées des points.
L'intérêt d'avoir une pile de matrice (et non une matrice seule), c'est que l'on peut sauvegarder à tout
moment l'état des transformations. En effet, chaque transformation change le repère initial (celui
que vous voyez quand vous lancez le programme). Donc chaque niveau de la pile peut représenter
un repère différent ce qui sera bien pratique pour construire des scènes complexes. Pour
sauvegarder l'état de la pile de matrice, et donc le repère courant, on utilise un pushMatrix. Pour
détruire les transformations courantes, on utilise un popMatrix. D'autres fonctions permettent en
général d'appliquer une translation, une rotation ou une homothétie à la matrice de haut de pile, et
donc de changer le repère courant.