TP OpenGL no 3

Transcription

TP OpenGL no 3
TP OpenGL no 3
Illumination de Phong et Textures
Récupérez les sources corrigées du TP précédant ici.
Exo.1 Illumination de Phong
Les shaders moon et earth utilisent un modèle d’illumination de Gouraud modifiez le shader earth
(earth.vs et earth.fs) pour réalisez un modèle d’illumination de Phong. A la différence de l’illumination
de Gouraud, le calcul de l’illumination se fait dans le fragment shader à partir des normales interpolées.
Pour interpoler une variable, il suffit de la déclarer avec le qualificatif varying dans le vertex et le fragment
shader par exemple : varying vec3 normal ;
Quelle différence majeur remarquez vous entre les 2 modèles d’illumination ?
Exo.2 Coordonnées de texture
Remplissez les coordonnées de texture dans la donnée membre texcoors dans la fonction :
void Object :: buildSphere ( float radius , int slice , int stack ) {
/* * TO DO * */
// Texture c o o r d i n a t e s
}
Exo.3 Chargement des textures
Chargez toutes les textures présentent dans le répertoire ./textures du projet et listées dans le tableau
TEXTURE NAMES. Le chargement des textures se fait dans la fonction :
bool Render :: init () {
// t ex t u r e s loading
/* * TO DO * */
...
}
Pour charger les textures utilisez les fonctions suivantes :
void glAc ti v eT ex tu r e ( GLenum texture ) ;
bool loadTexture ( const char * filename , GLuint & textureId ) ;
Exo.4 Fond étoilé
Affichez une troisième sphère de rayon 100 qui englobe toute la scène . Sur cette sphère
vous allez plaquer la texture starfield.png qui fera office arrière plan. Pour cela chargez
et utilisez le shader starfield sans y apporter aucune modification. Toutefois, il faudra
que vous passiez la texture voulue en paramètre au shader starfield, les fonctions
suivantes vous serons nécessaires :
g l G e t U n i f o r m L o c a t i o n // Returns the l o c a t i o n of a uniform v a r i a b l e
glUniform1i // Specify the value of a uniform v a r i a b l e for the current
program object
1
Exo.5 Lune
Inspirez vous du shader starfield pour modifier le shader moon et remplacez la
couleur uniforme de la composante diffuse par la couleur de la texture moon.png.
Pour que le rendu de la lune soit plus réaliste : supprimez l’illumination ambiante et
spéculaire du shader moon.
Exo.6 Terre (Texture de jour)
Modifiez le shader earth pour remplacer la couleur uniforme de la composante diffuse
par la couleur de la texture earth day.png. Pour que le rendu de la terre soit plus
réaliste : supprimez l’illumination ambiante et ne conservez les reflets spéculaires que
sur les océans et sur les parties enneigées du globe. Pour obtenir cet effet utilisez la
composante alpha de la texture earth.png. Les parties avec une réflexion spéculaire
maximale ont une composante alpha nul et les parties sans reflet spéculaire ont une
composante alpha égale à 1.
Exo.7 Terre (Texture de Nuit)
Toujours dans le shader earth, proposez une méthode pour afficher à la fois la texture
de jour earth day.png et de nuit earth night.png en fonction de l’éclairage :
– Lorsque le jour est total seul la texture de jour doit être visible.
– Lorsque la nuit est total seul la texture de nuit doit être visible.
– Un mélange des 2 textures doit apparaitre au crépuscule et à l’aube.
2

Documents pareils