Differences

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

Link to this comparison view

egc:teme:2019:03 [2019/12/05 21:21]
andrei.lambru
egc:teme:2019:03 [2020/01/14 08:42] (current)
alexandru.gradinaru
Line 1: Line 1:
-<​hidden>​ 
 ======= Tema 3 - Worms 3D ======= ======= Tema 3 - Worms 3D =======
  
   * **Responsabili:​** Cristi Lambru   * **Responsabili:​** Cristi Lambru
-  * **Lansare:​** ​decembrie+  * **Lansare:​** ​decembrie
   * **Termen de predare:** 12 ianuarie 2020, ora 23:55   * **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ă!**   * **Notă: Orice informație ce nu a fost acoperită în acest document este la latitudinea voastră!**
Line 15: Line 14:
 </​html>​ </​html>​
  
-====== Construcția terenului =====+===== Construcția terenului =====
  
-===== Harta de inălțimi ​=====+==== Harta de inălțimi ====
  
 Definim o suprafață de baleiere descrisă de funcția: Definim o suprafață de baleiere descrisă de funcția:
Line 28: Line 27:
  
 $$ $$
-f(x,z) = texture2D(unitTexture,vec2 (u,v)).r+f(x,z) = texture2D(textureUnit,vec2 (u,v)).r
 $$ $$
  
Line 37: Line 36:
 {{ :​egc:​teme:​2019:​heightmap.png?​nolink&​200 |}} {{ :​egc:​teme:​2019:​heightmap.png?​nolink&​200 |}}
  
-===== Geometria suport ​=====+==== Geometria suport ====
  
 Pentru a putea crea o suprafață definită de înălțimea dată de textură este necesară o geometrie suport care să cuprindă toate coordonatele $\{x,z\}$ finale. De asemenea, este necesar ca fiecărui vertex să i se asocieze o coordonată de textură, $\{u,v\} \in [0, 1]$, normalizată între limitele pe $x$ și pe $y$ ale geometriei suport. Pentru a putea crea o suprafață definită de înălțimea dată de textură este necesară o geometrie suport care să cuprindă toate coordonatele $\{x,z\}$ finale. De asemenea, este necesar ca fiecărui vertex să i se asocieze o coordonată de textură, $\{u,v\} \in [0, 1]$, normalizată între limitele pe $x$ și pe $y$ ale geometriei suport.
Line 43: Line 42:
 {{ :​egc:​teme:​2019:​terrain1.png?​nolink&​600 |}} {{ :​egc:​teme:​2019:​terrain1.png?​nolink&​600 |}}
  
-Geometria suport se desenează cu un shader special, care la pasul de vertex shader accesează textura în care se află înălțimile. Prin interogarea texturii se obține înălțimea de la coordonatele $\{u,​v\} ​\in [0,1]$, asociate vertexului. Această valoare se poate asocia direct coordonatei $y$ a vertexului sau se poate scala pentru un impact mai mare al terenului.+Geometria suport se desenează cu un shader special, care la pasul de vertex shader accesează textura în care se află înălțimile. Prin interogarea texturii se obține înălțimea de la coordonatele $\{u,v\}$, asociate vertexului. Această valoare se poate asocia direct coordonatei $y$ a vertexului sau se poate scala pentru un impact mai mare al terenului.
  
 {{ :​egc:​teme:​2019:​terrain2.png?​nolink&​600 |}} {{ :​egc:​teme:​2019:​terrain2.png?​nolink&​600 |}}
  
-===== Calculul normalelor ​=====+==== Calculul normalelor ====
  
 Pentru a putea lumina terenul este necesară calcularea informației de normală. Tehnica pe care o vom folosi se numește "​aproximare prin diferențe finite"​ și utilizează informația vecinilor pixelului din care s-a interogat înălțimea vertexului curent. Pentru a putea lumina terenul este necesară calcularea informației de normală. Tehnica pe care o vom folosi se numește "​aproximare prin diferențe finite"​ și utilizează informația vecinilor pixelului din care s-a interogat înălțimea vertexului curent.
Line 85: Line 84:
 {{ :​egc:​teme:​2019:​terrain4.png?​nolink&​600 |}} {{ :​egc:​teme:​2019:​terrain4.png?​nolink&​600 |}}
  
-====== Deformarea terenului ​======+===== Deformarea terenului =====
  
-===== Buffer-ul hărții de înălțimi ​=====+==== Buffer-ul hărții de înălțimi ====
  
-  * Pentru a avea acces la buffer-ul de pixeli al imaginii este necesar ca aceasta să fie încărcată direct cu librăria [[https://​github.com/​nothings/​stb|stb_image]]. ​Această ​se află deja în framework și cu ajutorul ei se poate încărca întreaga matrice de pixeli a unui fișier. Se poate folosi direct imaginea din această pagină. <code cpp>#​include <​stb/​stb_image.h>​+  * Pentru a avea acces la buffer-ul de pixeli al imaginii este necesar ca aceasta să fie încărcată direct cu librăria [[https://​github.com/​nothings/​stb|stb_image]]. ​Aceasta ​se află deja în framework și cu ajutorul ei se poate încărca întreaga matrice de pixeli a unui fișier. Se poate folosi direct imaginea din această pagină. <code cpp>#​include <​stb/​stb_image.h>​
  
 heightPixels = stbi_load((textureLoc + "​heightmap.png"​).c_str (), &width, &​height,​ &​channels,​ STBI_grey); heightPixels = stbi_load((textureLoc + "​heightmap.png"​).c_str (), &width, &​height,​ &​channels,​ STBI_grey);
Line 99: Line 98:
   * Pentru modificarea texturii pur și simplu se modifică o zonă de pixeli din imagine, în interiorul acestui buffer și se reîncarcă buffer-ul în procesorul grafic cu directiva de mai sus.   * Pentru modificarea texturii pur și simplu se modifică o zonă de pixeli din imagine, în interiorul acestui buffer și se reîncarcă buffer-ul în procesorul grafic cu directiva de mai sus.
  
-====== Gameplay ​======+===== Gameplay =====
  
-Jocul va fi multiplayer local în care pe rând fiecare jucător va prelua controlul a două personaje aflate în zone diferite ale terenului. Fiecare jucător va avea la dispoziție un singur proiectil pe tura. Acesta va avea o cameră third-person asupra personajului pentru a putea potrivi ținta. ​Odata decis, la apasărea click stânga ​pe mouse, proiectilul este lansat și este urmărit de cameră fără ca jucatorul ​să mai aibă control. La urmatoarea tură se schimbă personajul.+Jocul va fi multiplayer local în care pe rând fiecare jucător va prelua controlul a două personaje aflate în zone diferite ale terenului. Fiecare jucător va avea la dispoziție un singur proiectil pe tură. Acesta va avea o cameră third-person asupra personajului pentru a putea potrivi ținta. ​Odată ​decis, la apasărea ​butonului ​click stânga ​de la mouse, proiectilul este lansat și este urmărit de cameră fără ca jucătorul ​să mai aibă control. La impactul proiectilului cu terenul, acesta va lăsa în urmă un crater. La urmatoarea tură se schimbă personajul. 
 + 
 +===== Bonusuri posibile ===== 
 + 
 +  * Crearea de efecte speciale la impactul proiectilului cu terenul 
 +  * Adăugarea unei ținte sau a unor săgeți de ghidaj ale proiectilului 
 +  * Adăugarea de cer cu textură 
 +  * Adăugarea de UI pentru viață/​jucător curent 
 +  * Orice îmbunătățește vizual scena
  
 ===== Notare (150p) ===== ===== Notare (150p) =====
Line 107: Line 114:
   * Deformare teren (50p)   * Deformare teren (50p)
   * Cameră third person + lansare proiectil (20p)   * Cameră third person + lansare proiectil (20p)
-  * Deplasare proiectil + cameră observație (20p)+  * Deplasare proiectil ​+ crater ​+ cameră observație (20p)
   * Lumini spot deasupra celor două personaje (10p)   * Lumini spot deasupra celor două personaje (10p)
  
Line 125: Line 132:
 </​note>​ </​note>​
  
-</​hidden>​ 
egc/teme/2019/03.1575573697.txt.gz · Last modified: 2019/12/05 21:21 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