TP OpenGL no 4

TP OpenGL no 4
Nuit et Atmosph`ere
R´ecup´erez les sources corrig´ees du TP pr´ec´edant ici.
Exo.1 Jour et nuit
1. Faites tourner la Terre sur elle mˆeme en fonction de la donn´ee membre time.
Exercice `
a faire dans la fonction :
bool Render :: display ( const glm :: mat4 & view ) {
// Earth display
/* * TO C O M P L E T E * */
}
2. Transmettez les textures earth night.png et earth clouds.png au programme shader earth. Exercice `
a faire dans la fonction :
bool Render :: init () {
// Earth shader
// Get uniform l o c a t i o n s
// Set u n i f o r m s
/* * TO C O M P L E T E * */
}
3. Dans le shader earth.fs, proposez une m´ethode pour afficher `a la fois la texture
de jour earth day.png et de nuit earth night.png en fonction du coefficient
diffuse kd :
– Lorsque le jour est total seul la texture de jour doit ˆetre visible.
– Lorsque la nuit est total seul la texture de nuit doit ˆetre visible.
– Un m´elange des 2 textures doit apparaitre au cr´epuscule et `a l’aube.
Exo.2 Nuages
1. Affichez une sph`ere suppl´ementaire de rayon ATMOSPHERE RADIUS qui
englobe la Terre et tourne avec elle. Cette sph`ere sera l’atmosph`ere de la Terre.
Exercice `
a faire dans la fonction :
void Render :: display ( const glm :: mat4 & view ) {
// A t m o s p h e r e display
/* * TO DO * */
}
2. Transmettez la position de la lumi`ere et la texture earth clouds.png au programme shader atmosphere. Exercice `a faire dans la fonction :
bool Render :: init () {
// A t m o s p h e r e shader
// Get uniform l o c a t i o n s
// Set u n i f o r m s
/* * TO DO * */
}
1
3. Compl´etez les shaders atmosphere.vs et atmosphere.fs pour qu’ils affichent la texture earth clouds.png
avec un mod`ele d’illumination de Phong sans couleur ambiante (Voir les shaders earth.vs et earth.fs).
Exploitez la composante alpha (l’opacit´e) de la texture earth clouds.png pour rendre l’atmosph`ere
transparente aux endroits o`
u il n’y a pas de nuages. Enfin utilisez le programme shader atmosphere
pour afficher la sph`ere qui repr´esente l’atmosph`ere.
Exo.3 Ombre des nuages
Dans le shader earth.fs appliquez la texture earth clouds.png sur la surface de la
Terre pour simuler l’ombre des nuages. N’utilisez pas les composantes rgb de la
texture. Utilisez exclusivement la composante alpha de la texture earth clouds.png
pour faire une interpolation entre la couleur initial de la Terre et une couleur
sombre (du noir par exemple).
Exo.4 Animation des nuages
1. Transmettez la donn´ee membre time aux programmes shaders earth et atmosphere. La donn´ee membre
time est incr´ement´ee `
a chaque rafraichissement.
2. Dans les shaders earth.fs et atmosphere.fs, utilisez la variable uniforme time pour d´ecaler les coordonn´ees de textures dans le temps et ainsi faire tourner les nuages avec une vitesse de rotation diff´erente
de celle de la Terre.
Exo.5 Atmosph`
ere
1. Transmettez
les
constantes
ATMOSPHERE RADIUS
EARTH RADIUS au programme shader atmosphere.
et
2. Dans le shader atmosphere.fs calculer l’´epaisseur de l’atmosph`ere (e) travers´ee
par le vecteur vision (~v ) en fonction de la position de la camera (C) de la
direction du vecteur de vision (~v ), de la position du centre la Terre(P ), du rayon
de la Terre(rt ) et du rayon de l’atmosph`ere(ra ).
Pour cela vous pouvez utiliser les formules
suivantes pour calculer la distance entre le
a
vecteur
vision
et
le
centre
de
la
Terre
:
−
−
→
t
∧~
v ||
d = ||CP
||~
v ||
Pour calculer la distance de recouvrement
entre le vecteur vision et une sph`ere :
D = r. sin (arccos ( dr ))
Pour calculer l’´epaisseur de l’atmosph`ere
travers´
ee par le vecteur vision :
Da − Dt , si Dt > 0
e=
2.Da
, sinon
a
Utilisez l’´epaisseur e pour d´eterminer la vat
leur de la composante d’opacit´e de l’atmosph`ere tout en conservant l’affichage des
nuages et l’illumination de Phong.
3. Enfin faites varier la couleur de l’atmosph`ere en fonction de l’incidence des rayons
lumineux. Vous pouvez par exemple utilisez un bleu turquoise (1.0, 0.5, 0.0) pour
une lumi`ere directe et de l’orange (0.25, 0.5, 1) pour une lumi`ere rasante.
D
D
e
v
C
2
d
r
P
r