This shows you the differences between two versions of the page.
egc:teme:2020:03 [2020/12/17 15:50] andrei.lambru created |
egc:teme:2020:03 [2020/12/23 18:54] (current) andrei.lambru |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | <hidden> | + | ==== Tema 3 - Stylised Runner ==== |
- | ==== Tema 3 - ==== | + | |
* **Responsabili:** Bogdan Teacă, Cristi Lambru, Alex Dinu | * **Responsabili:** Bogdan Teacă, Cristi Lambru, Alex Dinu | ||
- | * **Lansare:** 17 decembrie | + | * **Lansare:** 18 decembrie |
* **Termen de predare:** 24 ianuarie 2021, ora 23:55 | * **Termen de predare:** 24 ianuarie 2021, ora 23:55 | ||
* **Regulament:** [[egc:teme:regulament|]] | * **Regulament:** [[egc:teme:regulament|]] | ||
* **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ă!** | ||
- | În cadrul temei 3, veți îmbunătăți realismul scenei din jocul implementat în tema 2. Puteți să porniți de la codul pe care l-ați implementat în cadrul temei 2. Scopul temei 3 este alegerea unui stil vizual și modificarea tuturor elementelor vizuale din tema 2 pentru a acomoda acel stil. Stilul este la latitudinea voastra. | + | În cadrul temei 3 veți îmbunătăți realismul scenei din jocul implementat în tema 2. Puteți să porniți de la codul pe care l-ați implementat în cadrul temei 2. Scopul temei este alegerea unui stil vizual și modificarea tuturor elementelor vizuale din tema 2 pentru a acomoda acel stil. Stilul este la latitudinea voastra. |
Din tema 2 se vor păstra următoarele elemente: | Din tema 2 se vor păstra următoarele elemente: | ||
Line 15: | Line 14: | ||
<note important> | <note important> | ||
- | În situația în care nu există implementată tema 2, sau dacă se dorește schimbarea modului de joc din temă, trebuie să se implementeze un nivel minimalist de gameplay. Acesta trebuie să conțină deplasarea sferei care reprezintă jucătorul pe o singură coloană cu platforme care nu conțin spații între ele. Practic, simularea unui drum infinit în fața jucătorului. | + | În situația în care nu există implementată tema 2, sau dacă se dorește schimbarea modului de joc din temă, trebuie să se implementeze cel puțin un nivel minimalist de gameplay. Acesta trebuie să conțină deplasarea sferei care reprezintă jucătorul pe o singură coloană cu platforme care nu conțin spații între ele. Practic, trebuie implementată simularea unui drum infinit în fața jucătorului. |
</note> | </note> | ||
=== Elemente decorative === | === Elemente decorative === | ||
- | De-alungul coloanelor de platforme, la stanga si la dreapta, trebuie sa existe elemente de decor cu care nu se interactioneaza. Acestea sunt specifice stilului vizual ales. Noi instante de astfel de elemente de decor se vor genera din fata, cu cat jucatorul avanseaza pe platforme. | + | De-a lungul coloanelor de platforme, la stânga și la dreapta, trebuie să existe elemente de decor cu care nu se interacționează. Acestea sunt specifice stilului vizual ales. Noi instanțe de astfel de elemente de decor se vor genera din față, cu cât jucătorul avansează pe platforme. |
- | Este obligatoriu ca generarea elementelor decorative sa fie programabila. Nu este permis sa se utilizeze modele 3D incarcate direct. Geometria elementelor decorative trebuie realizata de voi. Aceasta poate fi realizata prin primitive simple: cuburi, piramide, prin asamblarea mai multor astfel de primitive sau prin metode mai complexe care reproduc stilul vizual ales. | + | Este obligatoriu ca generarea elementelor decorative să fie programabilă. Nu este permis să se utilizeze modele 3D încărcate direct. Geometria elementelor decorative trebuie realizată de voi. Aceasta poate fi realizată prin primitive simple: cuburi, piramide s.a., prin asamblarea mai multor astfel de primitive sau prin metode mai complexe care reproduc stilul vizual ales. |
- | De asemenea, este obligatoriu ca toate elementele decorative generate sa aiba atasata o textura specifica elementului de decor ales. Pentru atasarea texturii trebuie generate in plus pentru fiecare vertex si coordonatele de textura. | + | De asemenea, este obligatoriu ca toate elementele decorative generate sa aibă atașată o textură specifică elementului de decor ales. Pentru atașarea texturii trebuie generate în plus pentru fiecare vertex și coordonatele de textură. |
+ | |||
+ | <note tip> | ||
+ | Pentru a ușura procesul de texturare se recomandă să folosiți coordonate de textură care depășesc intervalul [0,1] împreună cu parametrul de texturare **GL_REPEAT**. | ||
+ | </note> | ||
<note important> | <note important> | ||
- | Se oferă punctaj bonus pentru rezultate vizuale care satisfac cât mai mult stilul vizual ales! | + | Se oferă punctaj bonus pentru rezultate vizuale care satisfac cât mai mult stilul ales! |
</note> | </note> | ||
Line 32: | Line 35: | ||
Platformele din tema 2, sau cele care descriu drumul infinit după redefinirea modului de joc, trebuie sa aibă atașată o textură specifică stilului ales. De asemenea, dacă este necesar, puteți alege și o formă diferită pentru acestea. | Platformele din tema 2, sau cele care descriu drumul infinit după redefinirea modului de joc, trebuie sa aibă atașată o textură specifică stilului ales. De asemenea, dacă este necesar, puteți alege și o formă diferită pentru acestea. | ||
- | Este obligatorie introducerea de noi obstacole pe platforme. Aceste obstacole vor fi entități care blochează trecerea jucătorului și peste care acesta va trebui sa sară. Dacă jucătorul se lovește de ele, acesta va trebui sancționat: va pierde o viață, dacă se pastreaza implementarea din tema 2 sau va pierde tot jocul. | + | Este obligatorie introducerea de noi obstacole pe platforme. Aceste obstacole vor fi entități care blochează trecerea jucătorului și peste care acesta va trebui sa sară. Dacă jucătorul se lovește de ele, acesta va trebui sancționat: va pierde o viață, dacă se păstrează implementarea din tema 2 sau va pierde tot jocul. |
=== Elemente colectabile === | === Elemente colectabile === | ||
- | Pe platforme trebuie să se afle o serie de elemente colectabile specifice stilului ales. Aceste elemente nu trebuie sa fie statice la locul amplasarii si trebuie sa aiba o animatie aleasa de voi. Ele vor fi colectate când jucătorul le va atinge și vor crește scorul acestuia, scor care va fi afișat în colțul din dreapta sus. | + | Pe platforme trebuie să se afle o serie de elemente colectabile specifice stilului ales. Aceste elemente nu trebuie sa fie statice la locul amplasării, adică trebuie sa aiba o animație aleasă de voi. Ele vor fi colectate când jucătorul le va atinge și vor crește scorul acestuia, scor care va fi afișat în colțul din dreapta sus. |
<note important> | <note important> | ||
Line 42: | Line 45: | ||
=== Iluminarea scenei === | === Iluminarea scenei === | ||
- | Este obligatoriu ca în cel puțin două tipuri de elemente decorative sa introduceți elemente care produc lumină. Unul dintre ele va trebui sa conțină o sursă de lumină punctiformă și altul una de tip spot. Aceste surse de lumină trebuie să lumineze toată scena (obiectul care conține elementul de decor, celelalte elemente decorative din jurul lui, platformele și sfera care reprezintă jucatorul). Fiecare instanță a unui astfel de element de decor trebuie sa aibă o culoare diferită pentru sursa de lumină față de celelalte. | + | Este obligatoriu ca în cel puțin două tipuri de elemente decorative să introduceți elemente care produc lumină. Unul dintre ele va trebui sa conțină o sursă de lumină punctiformă și altul una de tip spot. Aceste surse de lumină trebuie să lumineze toată scena (obiectul care conține elementul de decor, celelalte elemente decorative din jurul lui, platformele și sfera care reprezintă jucătorul). Fiecare instanță a unui astfel de element de decor trebuie sa aibă o culoare diferită pentru sursa de lumină față de celelalte. |
- | Pentru a putea calcula intensitatea ce provine de la mai multe surse de lumini trebuie sa trimiteți toate aceste surse către shader (poziție, culoare). Intensitatea finală a luminii va fi suma intensităților fiecărei lumini în parte, conform formulei de mai jos. | + | Pentru a putea calcula intensitatea ce provine de la mai multe surse de lumini trebuie să trimiteți toate aceste surse către shader (poziție, culoare). Intensitatea finală a luminii va fi suma intensităților fiecărei lumini în parte, conform formulei de mai jos. |
- | $culoarea = K_e + I_a \cdot K_a + \sum{f_{at_i} \cdot I_{sursă_i} (K_d \cdot max(\vec{N}\cdot \vec{L_i}, 0) + K_s \cdot lum_i \cdot (max(\vec{N}\cdot \vec{H_i}, 0)^n})$ | + | $$culoarea = K_e + I_a \cdot K_a + \sum_{i}{f_{at_i} \cdot I_{sursă_i} (K_d \cdot max(\vec{N}\cdot \vec{L_i}, 0) + K_s \cdot lum_i \cdot max(\vec{N}\cdot \vec{H_i}, 0)^n})$$ |
<note tip> | <note tip> | ||
Line 52: | Line 55: | ||
* https://www.youtube.com/watch?v=68JE1XmXrog | * https://www.youtube.com/watch?v=68JE1XmXrog | ||
* https://youtu.be/1ZGMtV5iKDU?t=15 | * https://youtu.be/1ZGMtV5iKDU?t=15 | ||
- | |||
</note> | </note> | ||
=== Bonusuri Posibile === | === Bonusuri Posibile === | ||
* Schimbarea geometriei platformelor, specifică stilului vizual ales | * Schimbarea geometriei platformelor, specifică stilului vizual ales | ||
+ | * Rotirea surselor de lumină de tip spot pe parcursul rulării jocului. | ||
+ | * Power-up ce oferă jucătorului abilitatea redată vizual de a atrage colectabilele înspre el (asemănător efectului unui magnet). | ||
+ | * O formă geometrică a jucătorului, specifică stilului vizual ales. | ||
+ | * Crearea unui skybox specific stilului vizual ales, pe care îl puteți implementa prin texturarea unui cub scalat cu un factor supraunitar. Obiectele din scenă, împreună cu jucătorul, se vor afla în interiorul acestui cub, pentru a da impresia unui fundal aflat în depărtare. | ||
+ | * Animație care redă pierderea colectabilelor strânse de jucător la coliziunea acestuia cu obstacolele de pe platforme. | ||
- | === Notare (200p) === | + | === Notare (150p) === |
* Elementele decorative (70p) | * Elementele decorative (70p) | ||
* Generarea geometriei (40p) | * Generarea geometriei (40p) | ||
Line 65: | Line 72: | ||
* Platformele (25p) | * Platformele (25p) | ||
* Texturarea (5p) | * Texturarea (5p) | ||
- | * Obstacolele (10p) | + | * Obstacolele (20p) |
* Elementele colectabile (25p) | * Elementele colectabile (25p) | ||
- | * Amplasarea si animatia (10p) | + | * Amplasarea și animația (5p) |
* Colectarea (10p) | * Colectarea (10p) | ||
- | * Afisarea scorului in coltul din dreapta sus (10p) | + | * Afișarea scorului în colțul din dreapta sus (10p) |
- | * Iluminarea scenei cu mai multe surse de lumina de tip point si spot (30p) | + | * Iluminarea scenei cu mai multe surse de lumină de tip point și spot (30p) |
<note important> | <note important> | ||
Line 79: | Line 86: | ||
<note> | <note> | ||
Tema va fi implementată în OpenGL și C++. Este indicat să folosiți framework-ul și Visual Studio. | Tema va fi implementată în OpenGL și C++. Este indicat să folosiți framework-ul și Visual Studio. | ||
- | Pentru implementarea temei, în folderul Source/Laboratoare/ puteți crea un nou folder, de exemplu Tema2, cu fișierele Tema2.cpp și Tema2.h (pentru implementare POO, este indicat să aveți și alte fișiere). Pentru a vedea fișierele nou create în Visual Studio în Solution Explorer, apăsați click dreapta pe filtrul Laboratoare și selectați Add→New Filter. După ce creați un nou filtru, de exemplu Tema2, dați click dreapta și selectați Add→Existing Item. Astfel adăugați toate fișierele din folderul nou creat. În fișierul LabList.h trebuie adăugată și calea către header-ul temei. De exemplu: #include <Laboratoare/Tema2/Tema2.h> | + | Pentru implementarea temei, în folderul Source/Laboratoare/ puteți crea un nou folder, de exemplu Tema3, cu fișierele Tema3.cpp și Tema3.h (pentru implementare POO, este indicat să aveți și alte fișiere). Pentru a vedea fișierele nou create în Visual Studio în Solution Explorer, apăsați click dreapta pe filtrul Laboratoare și selectați Add→New Filter. După ce creați un nou filtru, de exemplu Tema3, dați click dreapta și selectați Add→Existing Item. Astfel adăugați toate fișierele din folderul nou creat. În fișierul LabList.h trebuie adăugată și calea către header-ul temei. De exemplu: #include <Laboratoare/Tema3/Tema3.h> |
</note> | </note> | ||
Line 96: | Line 103: | ||
* Î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. | * Î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> | </note> | ||
- | </hidden> |