Dans le Devoir 3, vous devez implémenter un terrain déformable.
Nous définissons une surface de balayage décrite par la fonction:
$$ f(x,z) = y $$
En raison de la construction, une telle surface peut être directement déterminée par le contenu d'une texture de la manière suivante:
$$ f(x,z) = texture2D(textureUnit,vec2 (u,v)).r $$
où $\{u, v\}$ représente les coordonnées de texture associées aux coordonnées spatiales $\{x,z\}$.
Ces types de textures décrivant les surfaces de balayage sont appelées textures de hauteur ou height maps. Ils contiennent dans chaque pixel une seule information en $[0,255]$ (normalisé $[0,1]$), sur un seul canal, représentant la hauteur de la zone couverte par le pixel respectif. Un exemple d'une telle texture peut être vu ci-dessous.
Afin de pouvoir créer une surface définie par la hauteur donnée par la texture, une géométrie support est nécessaire qui inclut toutes les coordonnées $\{x,z\}$ finale. Il est également nécessaire que chaque sommet soit associé à une coordonnée de texture, $\{u,v\} \in [0, 1]$, normalisé entre les limites de $x$ et $y$ de la géométrie support.
La géométrie support est dessinée avec un shader spécial qui, à l'étape du vertex shader, accède à la texture dans laquelle se trouvent les hauteurs. En interrogeant la texture, la hauteur est obtenue à partir des coordonnées $\{u,v\}$, associée au sommet. Cette valeur peut être directement associée à la coordonnée y du sommet ou il peut être mis à l'échelle pour un plus grand impact de la terre.
Étapes suggérées pour implémentation :
'Primitives/plane50.obj
')