Differences

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

Link to this comparison view

ppbg:tema:2023 [2023/11/20 12:46]
andrei.lambru
ppbg:tema:2023 [2024/05/13 08:55] (current)
andrei.lambru
Line 1: Line 1:
 ====== Temă - 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 //"​î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, ​aniamții pentru interacțiunea de atac sau animatii ​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 tastatura. Puteți viziona mai jos un filmuleț demonstrativ cu o aplicație 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 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>​ <​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>​
Line 26: Line 24:
 ==== Geometrie ==== ==== Geometrie ====
  
-Lumea de joc va fi 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 desenata ​cu aceeași culoare de bază. Fiecare inamic are o culoare aleasă ​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 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 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ă.
Line 35: Line 33:
  
 <​note>​ <​note>​
-Geoemtria personajului ​va fi 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.+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>​
  
-Jucătorul ​va putea controla de la tastatură un personaj. Cu tastele **W**, **A**, **S** și **D** se va putea deplasa personajul de-alungul ​direcțiilor **față**, **stânga**,​ **spate** și **dreapta** ale **camerei observator**. Apăsarea simulatană a doua taste, de exemplu tastele W și A rezultă în deplasarea jucătorului de-alungul ​vectorului compus dintre direcția față și stânga 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.
- +
-În filmulețul de mai jos se poate observa acest comportament pentru controlul personajului.+
  
 {{ :​ppbg:​tema:​control.gif?​600 |}} {{ :​ppbg:​tema:​control.gif?​600 |}}
Line 48: Line 44:
 ==== Comportament cameră observator ==== ==== Comportament cameră observator ====
  
-Camera observator se va afla î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.+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 ====
Line 56: Line 52:
 ==== Comportament atac ==== ==== Comportament atac ====
  
-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 ​aleatoare ​în 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 de joc în doi ==== ==== Comportament de joc în doi ====
  
-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 va desena ​geometria lumii din două perspective diferite, câte 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 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. 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 personajsimilar 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 77: Line 73:
     * Desenare geometrie ce conține o curbură - 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 ​jucatoruluiin momentul ​in care personajul se opreste ​din deplasare, se incepe ​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 ​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 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 ​curbura ​din doua pozitii ​diferite - 0.1p +      * Desenare geometrie ce conține ​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 usurintaIn aplicatia graficatoata 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 ​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ă ​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 observatorse 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 geometrieitrebuie ​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 varfului ​procesat de vertex shader +  * $Pozitie_v$ - poziția în spațiul ​lumii 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 deplasareAceastă 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ărieste 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 ​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 jucatorin momentul ​in care jucatorul ​se opreste ​din miscareanimatia ​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șcareanimaț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
  
ppbg/tema/2023.1700477165.txt.gz · Last modified: 2023/11/20 12:46 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