Aller au contenu

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

Pédales 1

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

Pédales 2

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).

Pédales 3

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).