Differences

This shows you the differences between two versions of the page.

Link to this comparison view

egc:teme:2019:10 [2019/12/04 23:22]
andrei.lambru
— (current)
Line 1: Line 1:
-===== Tema 3 - Worms 3D ===== 
- 
-  * **Responsabili:​** Cristian Lambru 
-  * **Lansare:​** 6 decembrie 
-  * **Termen de predare:** 12 ianuarie 2020, ora 23:55 
-  * **Notă: Orice informație ce nu a fost acoperită în acest document este la latitudinea voastră!** 
- 
-Î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. ​ 
- 
-===== Constructia Terenului ===== 
- 
-==== Hartile de Inaltimi ==== 
- 
-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)).r 
-$$ 
- 
-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. 
- 
-{{ :​egc:​teme:​2019:​heightmap.png?​nolink&​200 |}} 
- 
-==== Geometria Suport ==== 
- 
-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 5x5 unitati. 
- 
-{{ :​egc:​teme:​2019:​terrain1.png?​nolink&​600 |}} 
- 
-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. 
- 
-{{ :​egc:​teme:​2019:​terrain2.png?​nolink&​600 |}} 
- 
-==== Calculul Normalelor ==== 
- 
-Pentru a putea lumina intreaga suprafata este necesara informatia de normale. Exista diferite metode pentru a extrage normala la suprafata a unei geometrii generate pe baza unei functii, dar pentru simplitate vom folosi o metoda denumita calcul de diferente finite, care aproximeaza numeric normala. 
- 
-Obtinem inaltimea de la pozitia curenta, de la pozitia din dreapta si din fata (pe axa z). 
- 
-$$ 
-height = f(x,z) \\ 
-heightRight = f(x+1,z) \\ 
-heightUp = f(x,z+1) 
-$$ 
- 
-Calculam diferentele pe x si pe z. 
- 
-$$ 
-H_x = height - heightRight \\ 
-H_z = height - heightUp \\ 
-$$ 
- 
-Normala va fi vectorul normalizat care contine cele doua diferente pe x si pe z. 
- 
-$$ 
-normal = normalize(vec3(H_x,​ 2, H_z)) 
-$$ 
- 
-Deoarece diferentele dintre height si vecini pot fi destul de mici, este recomandat sa inmultiti H_x si H_y cu un factor de scalare pentru a obtine normalele in mod coerent. Rezultatul dupa calcularea lor si adaugarea unei lumini punctiforme in centrul terenului poate fi observat in imaginea de mai jos. 
- 
-{{ :​egc:​teme:​2019:​terrain3.png?​nolink&​600 |}} 
- 
-Pentru a adauga o textura de "​pamant"​ pe teren se poate crea o noua coordonata de textura sau se poate folosi o scalare a coordonatelor de textura folosite pentru harta de inaltimi impreuna cu parametrul ''​GL_REPEAT''​ de impachetare al texturii. 
- 
-$$ 
-(u_2,v_2) = (u,v) * 20 
-$$ 
- 
-Rezultatul final in urma aplicarii luminii si a texturii de "​pamant"​ se poate observa in imaginea de mai jos. 
- 
-{{ :​egc:​teme:​2019:​terrain4.png?​nolink&​600 |}} 
- 
-<note tip>Mai multe informatii despre coliziuni si cum se pot implementa in 3D: 
-  * [[https://​developer.mozilla.org/​en-US/​docs/​Games/​Techniques/​3D_collision_detection]] 
-</​note>​ 
- 
-=== Bonusuri Posibile === 
-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.). 
- 
-=== Notare (150p) === 
-  * Construcția terenului (total 50p) 
-    * Constructie geometrie (25p) 
-    * Calcal normale (15p) 
-    * Iluminare teren (10p) 
-  * Deformarea terenului (50p) 
-  * Animatie proiectil (20p) 
-  * Camera third person (10p) 
-  * Camera panoramica proiectil (10p) 
-  *  
- 
-=== Arhivarea proiectului === 
- 
-<​note>​ 
-  * În mod normal arhiva trebuie să conțină toate resursele necesare compilării și rulării 
-  * Înainte de a face arhiva asigurați-vă că ați dat clean la proiect 
-    * Click dreapta pe proiect în **Solution Explorer** -> **Clean Solution**, sau 
-    * Ștergeți folderul __**/Visual Studio/​obj**__ 
-  * Ștergeți fișierul __**/Visual Studio/​Framework_EGC.sdf**__ (în caz că există) 
-  * Ștergeți fișierul __**/Visual Studio/​Framework_EGC.VC.db**__ (în caz că există) 
-  * Ștergeți folderul __**/​.vs**__ (în caz că există) ​ 
-  * Ștergeți folderul __**/​x64**__ sau __**/​x86**__ (în caz că există) 
-    * Executabilul final este generat în folderul __**/​x86**__ sau __**/​x64**__ la finalul link-editării în funcție de arhitectura aleasă la compilare (32/64 biți) 
-  * În cazul în care arhiva tot depășește limita de 20MB (nu ar trebui), puteți să ștergeți și folderul __**/​libs**__ sau __**/​Resources**__ întrucât se pot adăuga la testare. Nu este recomandat să faceți acest lucru întrucât îngreunează mult testarea în cazul în care versiunea curentă a bibliotecilor/​resurselor diferă de versiunea utilizată la momentul scrierii temei. 
-</​note>​ 
  
egc/teme/2019/10.1575494534.txt.gz · Last modified: 2019/12/04 23:22 by andrei.lambru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0