TD 4 : Transformations, transformation stacks

Résumé du TD

Le but du TD est de construire un bonhomme de neige, en utilisant les transformations OpenGL: glTranslate, glRotate et les piles de transformations, avec les instructions glPushMatrix et glPopMatrix.

Instructions

Téléchargez et compilez le squelette de code fourni. Il contient une fonction qui s'occupe de la trackball, et une fonction display qui charge la matrice de transformation de la trackball, puis appelle la fonction bonhommeDeNeige.

C'est cette fonction qui s'occupe du modèle et de l'affichage du bonhomme de neige, et c'est elle que vous devez remplir.

Modèle du bonhomme de neige n° 1

Dans un premier temps, affichez un modèle simple de bonhomme de neige, formé de trois sphères empilées. Vous avez une fonction pour tracer une sphère centrée sur l'origine : glutSolidSphere(rayon, n_theta, n_phi);. Pour tracer trois sphères empilées, il faut combiner cette fonction avec glTranslate.

Les rayons des sphères sont stockés dans le tableau radius.

Vous avez tout intérêt à programmer ceci avec une pile de transformations (pushMatrix, translate, drawSphere, popMatrix, translate...)

Modèle du bonhomme de neige n° 2

Dans un deuxième temps, on va donnner à notre bonhomme de neige des boutons (sphères noires), deux yeux et un nez (cone rouge). Même principe : vous avez des fonctions qui tracent des sphères et des cones centrés sur l'origine, à vous de prendre la bonne transformation pour vous y amener...

Animation du bonhomme de neige

On va maintenant animer ce bonhomme, en utilisant les paramètres tilt et squash. Tilt correspond à une rotation par rapport à l'axe qui fait face au bonhomme, et doit naturellement s'appliquer au reste du bonhomme (si la base s'incline de 5 degrés vers la gauche, on s'attend à ce que le corps et la tête s'inclinent aussi). Squash correspond à un écrasement ou une élongation de la sphère concernée. Là aussi, les transformations impliquent un changement de position pour le reste du bonhomme de neige : si la base diminue, le reste du bonhomme doit descendre (il faut éviter qu'il y ait un trou...)