TD6: Shading
Le but du TP est dans un premier temps de se familiariser avec :
- le shading standard OpenGL
- les textures en OpenGL
et dans un deuxième temps de découvrir les possibilités de shading avancées avec GLSL :
- Phong shading
- Bump mapping
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-texturesModè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.