Tema 3 - Stylised Runner

  • Responsabili: Bogdan Teacă, Cristi Lambru, Alex Dinu
  • Lansare: 18 decembrie
  • Termen de predare: 24 ianuarie 2021, ora 23:55
  • Regulament: Regulament general
  • 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 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:

  • controlul jucătorului, forma lui sferică și numărul de vieți ale acestuia
  • platformele, distribuirea acestora și abilitatea jucătorului de a sări peste acestea

Î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.

Elemente decorative

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 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 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ă.

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.

Se oferă punctaj bonus pentru rezultate vizuale care satisfac cât mai mult stilul ales!

Platformele

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 păstrează implementarea din tema 2 sau va pierde tot jocul.

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 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.

Modul de afisare al scorului este la latitudinea voastra, atata timp cat este vizibil progresul.

Iluminarea scenei

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 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_{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})$$

Bonusuri Posibile

  • 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 (150p)

  • Elementele decorative (70p)
    • Generarea geometriei (40p)
    • Texturarea geometriei (20p)
    • Amplasarea (10p)
  • Platformele (25p)
    • Texturarea (5p)
    • Obstacolele (20p)
  • Elementele colectabile (25p)
    • Amplasarea și animația (5p)
    • Colectarea (10p)
    • Afișarea scorului în colțul din dreapta sus (10p)
  • Iluminarea scenei cu mai multe surse de lumină de tip point și spot (30p)

Punctajul pe temă se acordă doar pentru rezolvarea unitară a cerințelor în aceeași scenă. Tema trebuie să conțină și o componentă minimalistă de gameplay, așa cum a fost prezentată la inceputul enunțului, pentru ca aceasta să fie punctată.

Indicații Suplimentare

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 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>

Arhivarea proiectului

  • Î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 ExplorerClean 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.

egc/teme/2020/03.txt · Last modified: 2020/12/23 18:54 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