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