This shows you the differences between two versions of the page.
ppbg:tema:2023 [2023/11/20 12:20] andrei.lambru |
ppbg:tema:2023 [2024/05/13 08:55] (current) andrei.lambru |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Tema - I.A.J.S. ====== | + | ====== Temă - I.A.J.S. ====== |
* **Lansare:** 20 noimebrie 2023 | * **Lansare:** 20 noimebrie 2023 | ||
- | * **Termen de predare:** Inainte de momentul prezentarii | + | * **Termen de predare:** Înainte de momentul prezentării |
- | * **Termen de prezentare:** Ultima data de prezentare anuntata, nu mai tarziu de ultima zi din semestru | + | * **Termen de prezentare:** Ultima dată de prezentare anunțată, nu mai târziu de ultima zi din semestru |
- | * **Regulament si informatii suplimentare pentru punctarea temei:** [[ppbg:tema:regulament|]] | + | * **Regulament:** [[ppbg:tema: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ă!** | ||
- | I.A.J.S., sau //Inca un Alt Joc de Supravietuire// va reprezenta tematica temei pe care o veti avea de implementat :). Cerintele de baza ale temei vor contine doar partial elementele comune unui astfel de joc: control jucator, comportament inamici si interactiune de atac doar de la jucator la inamici. Restul elementelor, precum comportament bazat pe puncte de viata ale personajului controlat de jucator si ale inamicilor, aniamtii pentru interactiunea de atac sau animatii pentru disparitia unui inamic invins raman la latitudinea voastra pentru partea de bonus :) . Suplimentar, jocul va da posibilitatea controlului simultan a doua personaje, de la tastatura. Puteți viziona un mic demo construit pe baza framework-ului de laborator, care acoperă cerințele. | + | I.A.J.S. sau //"încă un Alt Joc de Supraviețuire"// va reprezenta subiectul temei pe care o veți avea de implementat :). Cerințele de bază ale temei vor conține doar parțial elementele comune unui astfel de joc: controlul unui personaj de catre jucător, comportament inamici și interacțiune de atac doar de la personaj la inamici. Alte elemente comune, precum comportament bazat pe puncte de viață ale personajului și ale inamicilor, animații pentru interacțiunea de atac sau animații pentru dispariția unui inamic învins rămân la latitudinea voastră și realizarea lor se punctează suplimentar :) . De asemenea, jocul va da posibilitatea controlului simultan a două personaje, de la tastatură. Puteți viziona mai jos un filmuleț demonstrativ cu o aplicație construită pe baza framework-ului de laborator, care acoperă cerințele. |
- | <hidden> | ||
<html> | <html> | ||
<p style="text-align:center;margin:auto;"> | <p style="text-align:center;margin:auto;"> | ||
- | <iframe width="560" height="315" src="https://www.youtube.com/embed/lpAwLBJB9io?si=9KqM_1WDevfu60XA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> | + | <iframe width="560" height="315" src="https://www.youtube.com/embed/Ui34-oUf6ew?si=3n1Pv5ibkTdP8OpA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> |
</p> | </p> | ||
</html> | </html> | ||
- | </hidden> | ||
- | <note>Curbura terenului este doar un **efect vizual**. Toate calculele de control ale personajelor, de determinare a directiilor de deplasare a inamicilor si de iluminare, împreună cu generarea geometriei tuturor obiectelor din lume se realizează într-un spațiu în care nu se ține cont de curbură.</note> | + | <note>Curbura terenului este doar un **efect vizual**. Toate calculele de control ale personajelor, de determinare a direcțiilor de deplasare a inamicilor și de iluminare, împreună cu generarea geometriei tuturor obiectelor din lume se realizează într-un spațiu în care nu se ține cont de curbură.</note> |
===== Reguli generale de joc ===== | ===== Reguli generale de joc ===== | ||
<note> | <note> | ||
- | Jocul permite controlul a doua personaje de la tastatura, potential de catre doi jucatori diferiti. Pentru simplitate, toate explicatiile, in afara de cele specifice comportamentului de joc in doi, vor face referire doar la un singur personaj. | + | Jocul permite controlul a două personaje de la tastatură. Pentru simplitate, toate explicațiile, în afară de cele specifice comportamentului de joc în doi, vor face referire doar la un singur personaj. |
</note> | </note> | ||
==== Geometrie ==== | ==== Geometrie ==== | ||
- | Lumea de joc va fi compusa dintr-o podea pe care se deplaseaza personajul controlat de jucator si inamicii. Toata geometria din care este realizat personajul sau inamicii, geometrie ce poate fi identica, este desenata cu aceeasi culoare de baza. Fiecare inamic are o culoare aleasa aleator. | + | Lumea de joc este compusă dintr-o podea pe care se deplasează personajul controlat de jucător și inamicii. Toată geometria din care este realizat personajul sau inamicii, geometrie ce poate fi identică, este desenată cu aceeași culoare de bază. Fiecare inamic are o culoare aleasă aleatoriu. |
- | La distante regulate unul de altul, se deseneaza stalpi de iluminat. In varful fiecarui stalp se afla doua surse de lumina de tip spot, la mica distanta una de cealalta. | + | La distanțe regulate unul de altul, se desenează stâlpi de iluminat. În vârful fiecărui stâlp se află două surse de lumină de tip spot, la mică distanță una de cealaltă. |
- | La pozitia personajului se afla o sursa de lumina punctiforma si o sursa de lumina de tip spot ce lumineaza pe directia de deplasare a personajului. Cele doua surse de lumina se deplaseaza odata cu pozitia personajului. | + | La poziția personajului se află o sursă de lumină punctiformă și o sursă de lumină de tip spot ce luminează pe direcția de deplasare a personajului. Cele două surse de lumină se deplasează odată cu poziția personajului. |
==== Control personaj ==== | ==== Control personaj ==== | ||
<note> | <note> | ||
- | Geoemtria personajului va fi desenata in intregime, astfel ca putem considera ca pozitia personajului nu este si pozitia observatorului din perspectiva careia se deseneaza geometria. Astfel, consideram ca exista un alt observator ce urmareste personajul, similar cu comportamentul unei camere din cinematografie. Din acest motiv, vom utiliza in continuare termenul de **camera** cand ne referim la observatorul din pozitia si pe directia de vizualizare din se deseneaza obiectele. | + | Geoemtria personajului este desenată în întregime, astfel că putem considera că poziția personajului nu este și poziția observatorului, din perspectiva căreia se desenează geometria. Astfel, considerăm că există un alt observator ce urmărește personajul, similar cu comportamentul unei camere din cinematografie. Din acest motiv, vom utiliza în continuare termenul de **cameră** când ne referim la observatorul din poziția și pe direcția de vizualizare din care se desenează geometria obiectelor. |
</note> | </note> | ||
- | Jucatorul va putea controla de la tastatura un personaj. Cu tastele **W**, **A**, **S** si **D** se va putea deplasa personajul de-alungul directiilor fata, stanga, spate si dreapta ale **camerei observator**. Apasarea in acelasi timp a doua taste, de exemplu **W+A** rezulta in deplasarea jucatorului de-alungul vectorului compus dintre directia fata si stanga a camerei observator. | + | Jucătorul poate controla de la tastatură un personaj. Cu tastele **W**, **A**, **S** și **D** se poate deplasa personajul de-a lungul direcțiilor **față**, **stânga**, **spate** și **dreapta** ale **camerei observator**. Apăsarea simulatană a două taste, de exemplu tastele W și A rezultă în deplasarea jucătorului de-a lungul vectorului compus dintre direcția față și stânga a camerei observator. În filmulețul de mai jos se poate observa acest comportament pentru controlul personajului. |
- | Geometria personajului este orientata astfel incat fata lui se afla pe directia de deplasare, descrisa mai sus. | + | {{ :ppbg:tema:control.gif?600 |}} |
- | In filmuletul de mai jos se poate observa acest comportament pentru controlul personajului: | + | Geometria personajului este orientată astfel încât "fața" lui se află pe direcția de deplasare, descrisă mai sus. |
- | + | ||
- | {{ :ppbg:tema:control.gif?600 |}} | + | |
- | ==== Comportament camera observator ==== | + | ==== Comportament cameră observator ==== |
- | Camera observator se va afla in partea de sus a personajului pe o directie inclinata fata de axa globala OY. Camera urmareste deplasarea personajului si directia de vizualizare este intotdeauna spre pozitia personajului. | + | Camera observator se află în partea de sus a personajului pe o direcție înclinată față de axa globală OY. Camera urmărește deplasarea personajului și direcția de vizualizare este întotdeauna spre poziția personajului. |
==== Comportament inamici ==== | ==== Comportament inamici ==== | ||
- | Inamicii incearca sa ajunga la pozitia personajului, astfel ca ei se deplaseaza continuu in directia pozitiei lui. De asemenea, la orice moment de timp, inamicii sunt orientati catre personaj. | + | Inamicii încearcă să ajungă la poziția personajului, astfel că ei se deplasează continuu în direcția poziției lui. Doar pentru a fi corect față de jucător, viteza de deplasare a inamicilor este mai mică decât viteza de deplasare a personajului :) . De asemenea, la orice moment de timp, inamicii sunt orientați către personaj. |
==== Comportament atac ==== | ==== Comportament atac ==== | ||
- | Prin apasarea tastei **space**, jucatorul are optiunea sa "traga" cu o "arma". Toti inamicii ce se afla in fata personajului, mai exact pe directia de deplasare a lui, la o distanta mai mica de 2 unitati fata de personaj, dispar din joc. In locul fiecarui inamic care dispare, alt inamic apare in locul lui la o pozitie aleatoare in lume. | + | Prin apăsarea tastei **space**, jucătorul are opțiunea de a "trage" cu o "armă". Toți inamicii ce se află în fața personajului, mai exact pe direcția lui de deplasare, la o distanță mai mică de 2 unități față de personaj, dispar din joc. În locul fiecărui inamic care dispare, alt inamic apare în locul lui la o poziție aleatorie în lume. |
- | ==== Comportament joc in doi ==== | + | ==== Comportament de joc în doi ==== |
- | La apasarea tastei **0 din zona numerica a tastaturii**, //numpad// in limba engleza sau a tastei **enter**, in joc apare un nou personaj ce poate fi controlat de la tastatura. Ecranul se imparte pe latime in doua zone de dimensiuni egale, ca in filmuletul demo de mai sus. Pe fiecare din cele doua ecrane se va desena geometria lumii din doua perspective diferite, cate una pentru fiecare personaj. | + | La apăsarea tastei **0 din zona numerică a tastaturii**, //numpad// în limba engleză sau a tastei **enter**, în joc apare un nou personaj ce poate fi controlat de la tastatură. Ecranul se împarte pe lățime în două zone de dimensiuni egale, ca în filmulețul demo de mai sus. Pe fiecare din cele două ecrane se desenează geometria lumii din două perspective diferite, câte una pentru fiecare personaj. |
- | Desenarea geometriei pe fiecare din cele 2 porti de afisare se face identic precum desenarea realizata pentru un singur personaj. Singura diferenta este dimensiunea portii de afisare. Desenarea lumii din perspectiva personajului initial se realizeaza in poarta de afisare din partea stanga, iar desenarea pentru al doilea personaj se realizeaza in poarta de afisare din dreapta. Cel de-al doilea personaj are o culoare diferita fata de primul. | + | Desenarea geometriei pe fiecare din cele 2 porți de afișare se face identic precum desenarea realizată pentru un singur personaj. Singura diferență este dimensiunea porții de afișare. Desenarea lumii din perspectiva personajului inițial se realizează în poarta de afișare din partea stângă, iar desenarea pentru al doilea personaj se realizează în poarta de afișare din dreapta. Cel de-al doilea personaj are o culoare diferită fața de primul. |
- | De la tastatura, se poate controla ce de-al doilea personaj similar ca in situatia celui initial. Se folosesc sagetile de la tastatura pentru deplasare si tasta 0 din zona numerica a tastaturii sau tasta enter pentru comportamentul de tras. | + | De la tastatură, se poate controla cel de-al doilea personaj, similar ca în situația celui inițial. Se folosesc săgețile de la tastatură pentru deplasare și tasta 0 din zona numerică a tastaturii sau tasta enter pentru comportamentul de tras. |
===== Barem ===== | ===== Barem ===== | ||
Line 71: | Line 67: | ||
* Desenare elemente vizuale (0.9p total) | * Desenare elemente vizuale (0.9p total) | ||
- | * Desenare geometrie personaj si inamici - 0.2p | + | * Desenare geometrie personaj și inamici - 0.2p |
- | * Desenare geometrie podea si stalpi de iluminat - 0.1p | + | * Desenare geometrie podea și stâlpi de iluminat - 0.1p |
- | * Desenare geometrie iluminata de sursele de lumina de tip spot de la stalpi - 0.2p | + | * Desenare geometrie iluminată de sursele de lumină de tip spot de la stâlpi - 0.2p |
- | * Desenare geometrie iluminata de sursele de lumina punctaforma si de tip spot de la personaj - 0.1p | + | * Desenare geometrie iluminată de sursele de lumină punctaformă și de tip spot de la personaj - 0.1p |
- | * Desenare geometrie ce contine o curbura - 0.3p | + | * Desenare geometrie ce conține o curbură - 0.3p |
* Comportament de joc (0.6p total) | * Comportament de joc (0.6p total) | ||
- | * Comportament de urmarire a personajului de catre camera - 0.1p | + | * Comportament de urmărire a personajului de către cameră - 0.1p |
- | * Control personaj de la tastatura (0.2p total) | + | * Control personaj de la tastatură (0.2p total) |
* Control deplasare personaj - 0.15p | * Control deplasare personaj - 0.15p | ||
- | * Orientare personaj conform directiei de deplasare - 0.05p | + | * Orientare personaj conform direcției de deplasare - 0.05p |
- | * Comportament de urmarire a personajului de catre inamici (0.1p total) | + | * Comportament de urmărire a personajului de către inamici (0.1p total) |
- | * Deplasarea inamicilor catre personaj - 0.05p | + | * Deplasarea inamicilor către personaj - 0.05p |
- | * Orientarea inamicilor catre personaj - 0.05p | + | * Orientarea inamicilor către personaj - 0.05p |
* Comportament de atac al personajului (0.2p total) | * Comportament de atac al personajului (0.2p total) | ||
- | * Detectie si disparitie inamici ce se afla in fata personajului - 0.15p | + | * Detecție și dispariție inamici ce se află în fața personajului - 0.15p |
- | * Creare inamic la o pozitie aleatoare cand un inamic este invins de catre personaj - 0.05p | + | * Creare inamic la o poziție aleatorie când un inamic este învins de către personaj - 0.05p |
* Animații (0.75p total) | * Animații (0.75p total) | ||
- | * Animatie continua de deplasare a personajelor si inamicilor - 0.5p | + | * Animație continuă de deplasare a personajelor și inamicilor - 0.5p |
- | * Animatie controlata de deplasarea jucatorului, in momentul in care personajul se opreste din deplasare, se incepe o animatie de intoarcere la cadrul de animatie in care sta pe loc - 0.25p | + | * Animație controlată de deplasarea jucătorului, în momentul în care personajul se oprește din deplasare, se începe o animație de întoarcere la cadrul de animație în care stă pe loc - 0.25p |
- | * Comportament de joc in doi (0.75p total) | + | * Comportament de joc în doi (0.75p total) |
- | * Desenare elemente vizuale mentionate mai sus de 2 ori in 2 porti de afisare diferite (0.6p in total) | + | * Desenare elemente vizuale menționate mai sus de două ori în două porți de afișare diferite (0.6p total) |
- | * Desenare geometrie in cele 2 porti de afisare - 0.1p | + | * Desenare geometrie în două porți de afișare - 0.1p |
- | * Desenare geometrie iluminata pe baza a doua pozitii si directii de vizualizare diferite - 0.2p | + | * Desenare geometrie iluminată pe baza a două poziții și direcții de vizualizare diferite - 0.2p |
- | * Desenare geometrie ce contine o curbura din doua pozitii diferite - 0.1p | + | * Desenare geometrie ce conține o curbură din două poziții diferite - 0.1p |
- | * Desenare geometrie si iluminare a personajului companion in poarta de afisare (0.1p total) | + | * Desenare geometrie și iluminare a personajului companion în poarta de afișare (0.1p total) |
- | * Desenare geometriei personajului companion in poarta de afisare - 0.05p | + | * Desenare geometrie personaj companion în poarta de afișare - 0.05p |
- | * Desenare geometrie iluminata de sursa de lumina punctiforma si de tip spot a personajului companion - 0.05p | + | * Desenare geometrie iluminată de sursa de lumină punctiformă și de tip spot a personajului companion - 0.05p |
* Control pentru 2 personaje diferite - 0.05p | * Control pentru 2 personaje diferite - 0.05p | ||
- | * Comportament de urmarire a camerei pentru fiecare personaj - 0.1p | + | * Comportament de urmărire a camerei pentru fiecare personaj - 0.1p |
===== Detalii de implementare ===== | ===== Detalii de implementare ===== | ||
Line 105: | Line 101: | ||
==== Construcție elemente vizuale ==== | ==== Construcție elemente vizuale ==== | ||
- | Geometria personajul si a inamicilor este identica. Ea este realizata din 6 paralelipipede, ce reprezinta trunchiul, capul, piciorul stang si drept, bratul stang si drept, conform imaginii de mai jos. | + | Geometria personajului și a inamicilor poate fi identică. Ea este realizată din 6 paralelipipede, ce reprezintă trunchiul, capul, piciorul stâng și drept, brațul stâng și drept al personajului, conform imaginii de mai jos. |
{{ :ppbg:tema:personaj.png?200 |}} | {{ :ppbg:tema:personaj.png?200 |}} | ||
- | In imagine, cele 6 componente ale geometriei sunt colorate diferit doar pentru a putea fi identificate cu usurinta. In aplicatia grafica, toata geometria unui personaj sau a unui inamic poate fi desenata cu o singura culoare. | + | <note> |
+ | În imagine, cele 6 componente ale geometriei sunt colorate diferit pentru a putea fi identificate cu ușurință. În aplicația grafică, toată geometria unui personaj sau a unui inamic poate fi desenată cu o singură culoare. | ||
+ | </note> | ||
<note tip> | <note tip> | ||
- | Recomandarea este sa construiti aceasta geometrie din 6 patrate pentru care aplicati o transformare neuniforma de modificare a scarii. | + | Recomandarea este să construiți această geometrie din 6 cuburi pentru care aplicați un lanț de transformări ce conține o transformare neuniformă de modificare a scării și o transformare de translație. |
</note> | </note> | ||
==== Control personaj ==== | ==== Control personaj ==== | ||
- | In situatia in care se utilizeaza framework-ul de laborator, pentru determinarea directiei de deplasare a jucatorului pe baza directiei de vizualizare a camerei observator, se poate utiliza obiectul de tip ''Camera'', dupa cum urmeaza: | + | În situația în care se utilizează framework-ul de laborator, pentru determinarea direcției de deplasare a jucătorului pe baza direcției de vizualizare a camerei observator, se poate utiliza obiectul de tip ''Camera'', după cum urmează: |
<code cpp> | <code cpp> | ||
Line 126: | Line 124: | ||
</code> | </code> | ||
- | Se utilizeaza o proiectie pe planul XOZ a directiei de vizualizare a camerei. Calculele se realizeaza analog si pentru celelalte directii ale obiectului de tip ''Camera''. | + | Se utilizează o proiecție pe planul XOZ a direcției de vizualizare a camerei. Calculele se realizează analog și pentru celelalte direcții ale obiectului de tip ''Camera''. |
=== Orientare personaj === | === Orientare personaj === | ||
- | Pentru a orienta geometria personajului in directia de deplasare, se utilizeaza o matrice de rotatie in jurul axei OY. In situatia in care se cunoaste directia de deplasare, unghiul de rotatie se poate calcula dupa cum urmeaza: | + | Pentru a orienta geometria personajului în direcția de deplasare, se utilizează o matrice de rotație în jurul axei OY. În situația în care se cunoaște direcția de deplasare, unghiul de rotație se poate calcula după cum urmează: |
$$ | $$ | ||
- | unghi = arctan(\frac{directie_x}{directie_y}) | + | unghi = arctan(\frac{directie_x}{directie_z}) |
$$ | $$ | ||
<note tip> | <note tip> | ||
- | Recomandarea este sa utilizati ''atan2'' pentru calcularea arctangentei. | + | Recomandarea este să utilizați ''atan2()'' pentru calcularea arctangentei. |
</note> | </note> | ||
- | ==== Comportament camera observator ==== | + | ==== Comportament cameră observator ==== |
- | In situatia in care se utilizeaza framework-ul de laborator, pentru desenarea geometriei din perspectiva camerei observator se poate utiliza obiectul de tip ''Camera'', dupa cum urmeaza: | + | În situația în care se utilizează framework-ul de laborator, pentru desenarea geometriei din perspectiva camerei observator, se poate utiliza obiectul de tip ''Camera'', după cum urmeaza: |
<code cpp> | <code cpp> | ||
Line 161: | Line 159: | ||
==== Iluminare geometrie ==== | ==== Iluminare geometrie ==== | ||
- | In calculele de iluminare a geometriei trebuie utilizata //componenta ambientala//, //componenta difuza// si //componenta speculara//. Se pot utiliza modelele de iluminare deja analizate. Daca se doreste, se poate inlocui calculul de iluminare pentru oricare din cele 3 componente cu un alt model de iluminare ce ofera rezultate vizuale superioare :) . In situatia aceasta se considera bonus. | + | În calculele de iluminare a geometriei, trebuie utilizată //componenta ambientală//, //componenta difuză// și //componenta speculară//. Se pot utiliza modelele de iluminare deja analizate. Dacă se dorește, se poate înlocui calculul de iluminare pentru oricare din cele 3 componente cu un alt model de iluminare ce oferă rezultate vizuale superioare :) . Utilizarea unor astfel de modele de iluminare se punctează suplimentar. |
- | === Transformarea vectorului normal in spatiul lumii === | + | === Transformarea vectorului normal în spațiul lumii === |
- | In situatia in care transformarea de modelare contine o transformare neuniforma de modificare a scarii, trecerea vectorului normal din spatiul obiectului in spatiul lumii se realizeaza dupa cum urmeaza: | + | În situația în care transformarea de modelare conține o transformare neuniformă de modificare a scării, trecerea vectorului normal din spațiul obiectului în spațiul lumii se realizează după cum urmează: |
Line 183: | Line 181: | ||
<note tip> | <note tip> | ||
- | * $\vec{N'}$ - vectorul normal in spatiul lumii | + | * $\vec{N'}$ - vectorul normal în spațiul lumii |
- | * $Model$ - matricea transformarii de modelare | + | * $Model$ - matricea transformării de modelare |
- | * $M^t$ - transpusa matricei M | + | * $M^t$ - matricea rezultată după transpunerea matricei M |
- | * $M^{-1}$ - inversa matricei M | + | * $M^{-1}$ - matricea rezultată după inversarea matricei M |
- | * $\vec{N}$ - vectorul normal in spatiul obiectului | + | * $\vec{N}$ - vectorul normal în spațiul obiectului |
</note> | </note> | ||
- | === Surse de lumina de tip spot de la stalpi === | + | === Surse de lumină de tip spot === |
- | Directia de iluminare a surselor de lumina de tip spot din varful stalpilor se vor roti continuu. | + | Direcția de iluminare a surselor de lumină de tip spot din vârful stâlpilor se vor roti continuu. |
- | ==== Curbură obiecte din lume ==== | + | ==== Curbură geometrie ==== |
- | Realizeaza curburii obiectelor din lume se realizează la pasul de desenare a obiectelor din scenă. Acest efect se creează prin modificarea componentei y a coordonatelor pentru toate varfurile obiectelor din lume. Procesul este realizat în vertex shader. Componenta y a tuturor varfurilor se modifică după cum urmează. | + | <note tip> |
+ | Pentru a crea efectul vizual de curbură a geometriei, se utilizează o abordare simplă ce oferă rezultate satisfăcătoare :). | ||
+ | |||
+ | Rezultatul este doar un efect vizual ce curbează geometria în jurul personajului, astfel că acesta poate ajunge la limita geometriei lumii, altfel spus la capătul ei și să și depășească acest capăt :) . De asemenea, este important de menționat că pentru calculele de iluminare NU se ține cont de calculele de creare a curburii geometriei. | ||
+ | </note> | ||
+ | |||
+ | Realizeaza curburii obiectelor din lume se realizează la pasul de desenare a obiectelor din scenă. Acest efect se creează prin modificarea componentei y a coordonatelor pentru toate vârfurile obiectelor din lume. Procesul este realizat în vertex shader. Componenta y a tuturor vârfurilor se modifică după cum urmează: | ||
Line 205: | Line 209: | ||
<note tip> | <note tip> | ||
- | * $Pozitie_v$ - poziția în spațiul lume a varfului procesat de vertex shader | + | * $Pozitie_v$ - poziția în spațiul lumii a vârfului procesat de vertex shader |
- | * $Pozitie_{personaj}$ - poziția în spațiul lume a personajului controlat de jucător | + | * $Pozitie_{personaj}$ - poziția în spațiul lumii a personajului controlat de jucător |
- | * $Pozitie_{v_y}$ - componenta y a poziției varfului | + | * $Pozitie_{v_y}$ - componenta y a poziției vârfului |
- | * $factorCurbura$ - un factor ce controlează curbura terenului | + | * $factorCurbura$ - un factor ce controlează curbura geometriei |
</note> | </note> | ||
+ | Factorul de curbură este proporțional cu dimensiunea obiectelor din lume. Pentru demo-ul de mai sus, este utilizat un factor de 0.02. | ||
+ | |||
+ | ==== Detecție eliminare inamici ==== | ||
- | Factorul de curbura este proporțional cu dimensiunea obiectelor din lume. Pentru demo-ul de mai sus este utilizat un factor de 0.02. | + | La apăsarea tastei space, personajul "trage" cu o "armă", așa cum s-a menționat mai sus. Pentru a identifica inamicii care se află pe direcția de deplasare a personajului, la distanță mai mică de 2 unități, se poate folosi o abordare simplă ce oferă rezultate satisfăcătoare. Se utilizează un cerc virtual de rază 1, astfel ca diametrul să fie de dimensiune 2, ce se poziționează cu centrul la distanța 1 față de poziția personajului, pe direcția lui de deplasare. Această abordare este descrisă vizual în imaginea de mai jos. |
- | ==== Detectie eliminare inamici ==== | + | {{ :ppbg:tema:collision.png?300 |}} |
- | La apasarea tastei **space**, | + | Prin utilizarea acestei abordări, este suficient să identificăm toți inamicii ce au poziția în cercul descris mai sus pentru a afla inamicii ce trebuie eliminați din joc. Se consideră pozițiile personajului și ale inamicilor proiectate paralel pe planul XOZ pentru a lucra într-un spațiu 2D. Pentru a verifica dacă o poziție se află în interiorul unui cerc, se verifică daca distanta între poziție și centrul cercului este mai mică decât raza cercului. |
- | ==== Animatii ==== | + | ==== Animații ==== |
- | Geometria personajului si a inamicilor trebuie sa realizeze o animatie continua de deplasare, conform filmuletului de mai jos: | + | Geometria personajului și a inamicilor trebuie să realizeze o animație continuă de deplasare, conform filmulețului de mai jos: |
{{ :ppbg:tema:animation1.gif?600 |}} | {{ :ppbg:tema:animation1.gif?600 |}} | ||
<note tip> | <note tip> | ||
- | Recomandarea este sa realizati aceasta aniamtie dintr-un lant de transformari, in care, pentru a da doar un exemplu, la finalul lantului propriu de transformari a bratului drept se aplica lantul de transformari a trunchiului. | + | Recomandarea este să realizați această animație prin utilizarea unui lanț de transformari, în care, pentru a da doar un exemplu, la finalul lanțului propriu de transformări ale brațului drept se aplică lanțul de transformari ale trunchiului. |
</note> | </note> | ||
- | === Animatie de oprire === | + | === Animație de oprire === |
- | Doar pentru personajul controlat de jucator, in momentul in care jucatorul se opreste din miscare, animatia trebuie sa se intoarca inapoi la cadrul de animatie in care personajul sta pe loc. In filmuletul de mai jos se poate observa acest comportament de joc. | + | Doar pentru personajul controlat de jucător, în momentul în care jucătorul se oprește din mișcare, animația trebuie să se întoarcă înapoi la cadrul de animație în care personajul stă pe loc. În filmulețul de mai jos se poate observa acest comportament de joc. |
{{ :ppbg:tema:animation2.gif?600 |}} | {{ :ppbg:tema:animation2.gif?600 |}} | ||
- | ==== Desenarea geometriei in doua porti de afisare ==== | + | ==== Desenarea geometriei în două porți de afișare ==== |
+ | În momentul în care jocul se utilizează în 2, pe ecran se desenează geometria în două porți de afișare cum s-a descris mai sus. Toate elementele vizuale, inclusiv personajul companion și iluminarea cu sursele de lumină proprii personajului companion, trebuie să se deseneze din două perspective diferite, câte una pentru fiecare personaj. De asemenea, curbura geometriei trebuie realizată din poziția personajului din perspectiva căruia se desenează geometria în poarta de afișare. | ||
===== Exemple de funcționalități bonus ===== | ===== Exemple de funcționalități bonus ===== | ||
Line 241: | Line 249: | ||
* Geometrie mai complexă față de cea din cerința de bază pentru elementele vizuale din joc | * Geometrie mai complexă față de cea din cerința de bază pentru elementele vizuale din joc | ||
- | * | + | * Finalizarea comportamentului de joc pentru a avea de indeplinit o misiune si pentru a incheia jocul |
+ | * Animatie de tras cu arma pentru personaj | ||
+ | * Utilizarea unor modelele de iluminare ce ofera rezultate vizuale superioare celor din demo | ||
* Orice aduce îmbunătățiri vizuale jocului | * Orice aduce îmbunătățiri vizuale jocului | ||