TD6: Shading

Le but du TP est dans un premier temps de se familiariser avec :

et dans un deuxième temps de découvrir les possibilités de shading avancées avec GLSL :

Pour répér le TP, taper :

tar zxvf ~holzschu/td6/td6.tar.gz
cd td6
qmake

Squelette du programme

Présentation interactive au tableau.

Shading OpenGL standard

But prendre en main l'API pour les multi-textures

Modèle de shading standard

Écrire le code de drawFlatShadedCylinder(float r,float h,unsigned int n) qui affiche un cylindre vertical de rayon r entre les hauteurs z=0 et z=h, où le cercle est approximé par un polygone à n côtés avec une normal par facette. Écrire le code de drawGouraudShadedCylinder(float r,float h,unsigned int n) qui dessine le même cylindre avec une normal par face. Lancer le programme et comparer le flat shading et le Gouraud shading en appuyant sur la touche G.

Écrire le code de drawSquare(float r,unsigned int n) qui dessine un carré centré en l'origine, de côté 2r et composé de n par n petits carreaux. Lancer le programme et regarder ce qui se passe quand on fait varier la tesselation du carré (nombre de petits carreaux) en appuyant sur les touches + et -.

Commenter le code qui affiche le cylindre pour la suite du TP.

Textures en OpenGL

Modifier le code de drawSquare(float r,unsigned int n) pour que chaque sommet ait deux jeux de coordonnés textures.

Dans la partie "Setup the textures" de QGLViewer::draw(), mettre les appels OpenGL qui active la première unité de texture (GL_TEXTURE0), l'associe à l'image diffusTexture et choisit le mode GL_REPLACE. Le code est le suivant :

  glActiveTexture(GL_TEXTURE0);
  glEnable(GL_TEXTURE_2D);
  glBindTexture(GL_TEXTURE_2D,diffusTexture);
  glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);

Zoomer et dézommer sur le carré pour observer les effets d'aliasing.

Changer le mode texture en GL_MODULATE et relancer le programme pour voir la différence.

Activer la deuxième unité de texture en mode GL_MODULATE.

Shading avancé avec OpenGL

Le programme contient tout le code pour charger les shaders et les activer/désactiver en pressant la touche S. Il permet aussi de recharger les shaders après que vous avez modifié les fichiers shader.vert et shader.frag. Pour cela, il suffit de presser la touche R.

Regarder le code actuel des shaders et vérifier ce que ca donne quand on les active.

Modifier le shader pour qu'il affiche la texture de normal, puis pour qu'il affiche un mélange des 2. Modifier le ensuite pour qu'il affiche comme composante RG de la couleur les coordonnées textures.

Implémenter le Phong shading. Comparer l'éclairage sur le carré peu tesselé avec Gouraud shading (shaders désactivés, OpenGL standard) et avec Phong shading (shaders activés)

Implémenter le bump mapping.