TD1

Transcription

TD1
Programmation graphique TD 1 :
Lego Star Wars, la guerre des clones
28 janvier 2009
Le but de ce TD est de réaliser un clone (très légèrement simplifié) du jeu Lego Star Wars.
1. Récupérez le squelette du programme par la commande :
mkdir graphique
scp -r elsa2:/home/enseign/scollang/graphique/2009/td1 graphique/
Le répertoire créé td1 contient les fichiers suivants :
• main.cpp : programme principal ;
• primitives.hpp, primitives.cpp : code de dessin des formes de base : parallélépipède, cylindre ;
• lego.hpp, lego.cpp : description des pièces de Lego ;
• vecteur.hpp, vecteur.cpp : code auxiliaire pour le calcul vectoriel ;
• Makefile : pour compiler le tout.
1
Dessine-moi un Lego
Pour commencer, il faut dessiner les briques de Lego.
2. Compléter le code de Parallelepipede::Dessine dans primitives.cpp pour dessiner un parallélépipède. Les coordonnées des sommets sont déjà toutes calculées.
2
Un peu d’animation
On va maintenant construire et animer notre bonhomme Lego.
Les pièces de Lego sont représentées par des objets C++ : Bras, Jambe, Tete. L’objet Bonhomme est
composé du tronc auquel on peut ajouter les éléments sus-mentionnés. Les pièces forment ensuite une hiérarchie :
le bras peut avoir une main, la main peut tenir un accessoire (comme un sabre laser).
Les points de jonctions sont aussi des points d’articulation : la classe Bonhomme contient des champs
(angle bras gauche, angle pied droit, ...) donnant l’angle associé à chaque articulation.
Le code dessinant les pièces de Lego est maintenant écrit. Par contre, il reste à relier les pièces entre elles.
Pour cela, on va utiliser les transformations usuelles (glTranslate, glRotate), mais aussi les opérations de
sauvegarde et restauration de la matrice : glPushMatrix et glPopMatrix.
3. Compléter la fonction Dessine de la classe Bonhomme pour dessiner à la bonne place les jambes du Jedi.
Pour les bras et la tête, c’est déjà fait.
4. Les polygones qui apparaissent devant sont les derniers dessinés. Ce n’est pas ce qu’on veut. Quelles-sont les
trois modifications nécessaires pour activer le tampon de profondeur?
5. On veut pouvoir contrôler les mouvements du personnage avec les touches du clavier. Ça tombe bien, la
fonction SpecialKey est déjà presque écrite dans main.cpp. En profiter pour permettre de changer l’angle
de vue avec d’autres touches du clavier.
6. Si vous avez le temps, ajouter Anakin Skywalker en face d’Obi-Wan Kenobi.
Dark Vador ressort mal sur fond noir. Changer la couleur de fond pour du blanc avec glClearColor.
1
3
Changeons de perspective
7. Modifier InitGL dans main.cpp pour utiliser une vraie projection perspective plutôt qu’une perspective
orthogonale.
4 Éclairage
Sur Tatooine, il y a deux soleils nommés Tatoo I et Tatoo II. On considère qu’ils sont à une distance infinie dans les
directions respectives (0.2, 1, 0.2) et (−0.3, 1, 0.1) et qu’ils émettent respectivement une lumière jaune et orange.
8. Activer l’éclairement et ajouter les soleils. Que faut-il rajouter aux pièces de Lego pour que ça marche?
9. Qu’est-ce qu’il faut rajouter d’autre pour que ça marche mieux?
10. Le sabre laser d’Obi-Wan Kenobi émet une lumière bleue, et la lumière reçue par un objet varie avec l’inverse
du carré de la distance par rapport au sabre (atténuation quadratique). On suppose la source de lumière située au
milieu du sabre. Pour Dark Vador, c’est pareil, mais en rouge.
2

Documents pareils

TD3

TD3 L’objet Bonhomme est composé du tronc auquel on peut ajouter les éléments susmentionnés. Les pièces forment ensuite une hiérarchie : le bras peut avoir une main, la main peut tenir un accesso...

Plus en détail