Differences

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

Link to this comparison view

ppbg:tema:2023 [2023/11/20 12:13]
andrei.lambru [Animatii]
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 explicatiilein 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 sursa de lumina punctiforma si 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ă sursă ​de lumină punctiformă și 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 ​observatoruluidin 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 fatastanga, spate si dreapta ale **camerei observator**. ​Apasarea in acelasi timp 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ă ​două taste, de exemplu ​tastele ​și 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 |}}
  
-==== Comportament camera observator ====+Geometria personajului este orientată astfel încât "​fața"​ lui se află pe direcția de deplasare, descrisă mai sus.
  
-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.+==== Comportament cameră observator ==== 
 + 
 +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 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 67: 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 ​curbura ​- 0.3p+    * Desenare geometrie ce conține ​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 101: 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 122: 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 157: 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 179: 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 201: 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 237: 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.1700475206.txt.gz · Last modified: 2023/11/20 12:13 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