Programmation Graphique : TP séance 03
- Rendu du TP sur Ametice :
- Suivez les instructions pour le rendu du TP en mettant le bon numéro de séance dans le nom du répertoire.
- N'oubliez pas de rendre votre travail à la fin de la séance comme indiqué, même si vous n'avez pas fini la planche de TP, puis de rendre la version finale (sans changer le nom du fichier) avant le début de la séance suivante.
Exercice 1. Pédalier de vélo avec VBO
Le but est de dessiner deux pédales de vélo, de part et d'autre d'un cylindre central, et de mettre le pédalier en mouvement en gardant les pédales horizontales.
Cet exercice est l'occasion d'expérimenter le profile core d'openGL, en faisant des dessins avec un VBO.
Dans votre nouveau répertoire pgra-TP03-NOM1-NOM2
, récupérer les
fichiers habituels, en les recopiant du TP 02 ou en les re-téléchargeant :
le Makefile
,
les fichiers de GLAD glad.c
, glad.h
,
khrplatform.h
,
le module de calcul matriciel vmath.h
.
Enfin, récupérer l'exemple de départ fw33-cube.cpp
.
Vérifiez que vous pouvez compiler et exécuter l'exemple (au besoin, voir 3.1. Installation et compilation dans le CM 01).
La touche a
déclenche une animation, la touche p
change le type de
projection, c
change le cube repère, h
affiche l'aide pour les réglages
de la projection.
Tout ce dont vous avez besoin de savoir en OpenGL core pour réaliser ce TP est expliqué dans le CM 03, section 6. Core profile.
1.1. Dessin d'un cylindre
En vous inspirant des classes Triangles
et WireCube
présentes dans
l'exemple, reprenez votre classe Cylindre
du TP 02 en le dessinant
cette fois-ci avec un VBO.
Instanciez ensuite dynamiquement le cylindre central de la figure (à la
place des triangles) dans initGL
, libérez-le dans tearGL
, et dessinez-le
en le laissant centré à l'origine dans displayGL
.
Reprenez également la gestion de l'angle m_alpha
du TP 02 avec la barre
espace, de manière à effectuer une rotation lente du cylindre (pour contrôler,
passer en mode fil de fer avec la touche L
).
1.2. Dessin d'une pédale
En vous inspirant de la classe WireCube
,
déclarer une classe Pedale
avec les données membre suivantes, en rajoutant
le préfixe m_
:
- la largeur
larg
; - la longueur
long
; - la hauteur
haut
; - le chanfrein
chanf
; - la couleur
(coul_r, coul_v, coul_b)
du côté.
Le constructeur mémorisera les sommets calculés dans un VBO, de manière
à permettre le rendu avec des GL_TRIANGLE_STRIP
comme sur la figure ci-dessous.
La pédale est centrée à l'origine.
Par exemple, les coordonnées du point A sont :
(-larg/2+chanf
, haut/2
, long/2
).
Rajouter une méthode draw
qui dessine la pédale, avec les côtés dans
la couleur (coul_r, coul_v, coul_b)
, le pourtour dans la
couleur (coul_r*0.5, coul_v*0.5, coul_b*0.5)
, et les biseaux chanfreinés dans la
couleur (coul_r*0.7, coul_v*0.7, coul_b*0.7)
.
Rajouter un paramètre flag_fill
à la méthode draw
de manière à pouvoir
choisir entre des faces remplies et un dessin "fil de fer" (touche L
)
grâce à la fonction glPolygonMode
(voir TP 02).
Instanciez dynamiquement une pédale dans initGL
, libérez-la dans tearGL
,
dessinez-la deux fois dans displayGL
, sans leur faire subir de rotation avec
m_alpha
, mais uniquement des translations pour les placer de part et d'autre
du cylindre central.
1.3. Dessin du pédalier et animation
Instanciez dynamiquement 3 cylindres pour les axes (schématisés en vert sur dessin en haut de la page) et 2 cylindres longs pour les manivelles (schématisés en magenta).
Placez les 5 cylindres et les 2 pédales autour du cylindre central en fonction
de l'angle m_alpha
, de manière à obtenir une animation correcte (pédales
toujours horizontales).