This is an old revision of the document!
În cadrul temei 2 trebuie să implementați un joc în care sunteți un aviator ce nu trebuie să se lovească de obstacole și nici să rămână fără combustibil pentru avion.
Definim o suprafata de baleiere descrisa de functia:
$$ f(x,z) = y $$
Datorita constructiei, o astfel de suprafata poate fi determinata direct de continutul unei texturi in urmatorul mod:
$$ f(x,z) = texture2D(unitTexture,vec2 (u,v)) $$
unde $\{u, v\}$ reprezinta coordonatele de textura asociate coordonatelor spatiale $\{x,z\}$.
Aceste tipuri de texturi care descriu suprafete de baleiere se numesc harti de inaltime sau height maps. Ele contin in fiecare pixel o singura informatie in $[0,255]$ (normalizat $[0,1]$), pe un singur canal, ce reprezinta inaltimea zonei acoperite de pixelul respectiv. Un astfel de exemplu de textura se poate vedea mai jos.
Pentru a putea crea o suprafata definita de inaltimea data de textura este necesara o geometrie suport care sa cuprinda toate coordonatele $\{x,z\}$ finale si toate coordonatele y egale cu 0. De asemenea, fiecarui vertex trebuie sa i se asocieze o coordonata de textura, $\{u,v\} \in [0, 1]$, normalizata intre limitele geometriei pe x si pe y. In mod particular, geometria din imaginea de mai jos a fost generata cu 100 de linii si 100 de coloane, pe o suprafata de 5×5 unitati.
Geometria suport se deseneaza cu un shader special, care la pasul de vertex shader acceseaza textura in care sunt salvate inaltimile. Se obtine valoarea culoarea de la coordonatele $\{u,v\}$ asociate si se obtine o valoare in $[0,1]$. Aceasta valoare reprezinta inaltimea, coordonata y a vertexului, care se poate scala, dupa plac. O desenare a geometriei generate anterior cu inaltimile obtinute din textura de mai sus si cu factorul de scalare al inaltimii egal cu 2 va avea rezultatul din imaginea de mai jos.
Atât viețile rămase, cât și combustibilul disponibil vor fi afișate pe ecran. Pentru acest lucru se pot folosi orice forme sau metode care să exprime acest lucru: sugerăm folosirea unor sfere pentru vieți și două dreptunghiuri suprapuse pentru combustibil (unul negru în spate și unul colorat în față, care se va scala pentru a evidenția consumarea combustibilului).
Pe lângă obstacole sau combustibil, pot să existe și alte obiecte specifice în scenă ce aduc anumite beneficii/dezavantaje (de exemplu, o sferă galbenă poate aduce o viață în plus sau un cub verde face avionul invincibil pentru o perioadă de timp, sau poate trage proiectile pentru distrugerea obstacolelor etc.).