TD d`infographie n°1

Transcription

TD d`infographie n°1
TD Synthèse d'images n°3
Cours de Synthèse d'Images & Réalité Virtuelle
Master 2 : Signal Image Synthèse
Remédiation en OpenGL
Suite des shaders & initiation aux textures
Ce TD s'appuie sur l'exercice 2 du TD précédent. A priori hormis le package de texture, vous n'avez
rien à télécharger de nouveau.
Exercice 1 : Texture procédurale
1. Créez un cylindre au centre de votre scène. Pour ce faire, utilisez simplement le mesh
cylindre présent dans basic_mesh.hpp
2. A l'aide des coordonnées de textures disponibles dans le modèle du cylindre, faites en sorte
d'appliquer sur ces cônes la texture suivante que vous construirez mathématiquement
comme ceci :
Séparez le cas v>u puis évaluez les deux cas restants
Exercice 2 : De vraies textures
1. Téléchargez le pack de texture sur le site de votre enseignant.
2. Créer une nouvelle texture et chargez l'image masonry-wall-texture.ppm (ou tga).
3. Initialisez cette texture dans OpenGL (voir les fonctions dans la classe Texture2D). Puis
appliquez la sur les cônes. Pour ce faire, vous devez créer un sampler dans les shaders et
l'utiliser. De plus, vous devez charger la texture avant son utilisation lors du dessin (dans la
fonction drawScene)
4. Faites en sorte d'appliquer 4 fois cette texture horizontalement sur le pourtour de vos cônes.
Exercice 3 : Création automatique de terrain
Un terrain se représente fréquemment par une image en niveau de gris, où ce niveau de gris
représente l'altitude du terrain. Reprenez la grille que vous avez construit au premier TD (qui doit
actuellement être située sur le plan (Oxz).
Charger dans une texture le fichier map.pgm (en niveau de gris). Utilisez cette texture pour modifier
la hauteur de chacun des sommets de la grille à l'aide du vertex shader. Une valeur de 0 dans la
texture indique pas d'augmentation de hauteur. Une valeur de 1, indique une augmentation de
hauteur maximale (à définir vous même).
Exercice 4: Eclairage diffus
1. Modifiez votre couple de shader pour donner une couleur qui dépende de la coordonnée 'y'
du point considéré : par exemple la couleur (y,1,0)
2. Nous allons maintenant créer un shader pour faire de l'illumination diffuse issue d'une
source de lumière ponctuelle S. Pour ce faire, il faut
1. Transmettre au shader la position de la source de lumière S (à définir vous même).
2. Récupérer, dans le shader, les informations de normale en chaque point puis en chaque
fragment (voir notamment dans le fichier basic_mesh.[ch]pp)
3. Réaliser l'illumination diffuse à l'aide de la formule :
⃗ . OS
⃗
I= I 0 k d N
avec I0 l'intensité lumineuse (choisissez 1.0), kd le coefficient de réflexion diffuse (une
valeur par canal RGB), N la normale et OS le vecteur (point considéré => source de
lumière).
3. Tournez autour de votre cylindre et vérifiez que votre illumination est cohérente. Que faut-il
faire aux normales. Demandez à votre enseignant la différence entre la modelview matrix &
la normal matrix.
4. Faites tourner la lumière

Documents pareils