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