Differences

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

Link to this comparison view

ppbg:tema:2024 [2024/12/10 19:07]
andrei.lambru
ppbg:tema:2024 [2024/12/10 19:57] (current)
andrei.lambru
Line 29: Line 29:
 Geometria suport se realizează pe CPU și se trimite la desenare pentru a se deforma conform următorilor pași. Geometria suport se realizează pe CPU și se trimite la desenare pentru a se deforma conform următorilor pași.
  
-În ce de-al doilea pas, se realizează deformarea geometriei suport conform unei hărți de înălțimi, similar precum în [[ppbg::​laboratoare:​08 | laboratorul 8]]. Rezultatul acestei operații se poate observa în imaginea de mai jos.+În ce de-al doilea pas, se realizează deformarea geometriei suport conform unei hărți de înălțime, similar precum în [[ppbg::​laboratoare:​08 | laboratorul 8]]. Rezultatul acestei operații se poate observa în imaginea de mai jos.
 {{ :​ppbg:​tema:​terrain2.png?​600 |}} {{ :​ppbg:​tema:​terrain2.png?​600 |}}
  
-Suprafața deformată la pasul anterior se colorează prin eșantionarea a două texturi, pe baza inălțimii suprafeței,​ similar precum în bonusul din [[ppbg::​laboratoare:​08 | laboratorul 8]]. Rezultatul se poate vedea în următoarea imagine.+Suprafața deformată la pasul anterior se colorează prin eșantionarea a două texturi, pe baza inălțimii suprafeței,​ similar precum în bonusul din [[ppbg::​laboratoare:​08 | laboratorul 8]]. Rezultatul se poate vizualiza ​în următoarea imagine.
 {{ :​ppbg:​tema:​terrain3.png?​600 |}} {{ :​ppbg:​tema:​terrain3.png?​600 |}}
  
Line 43: Line 43:
 Pentru a crea efectul vizual de curbură a geometriei, se utilizează o abordare simplă ce oferă rezultate satisfăcătoare :). 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 elicopterului,​ astfel că acesta poate ajunge la limita geometriei lumii, altfel spus la capătul ei și să și depășească acest capăt :) .+Rezultatul este doar un efect vizual ce curbează geometria în jurul elicopterului,​ astfel că acesta poate ajunge la limita geometriei lumii.
 </​note>​ </​note>​
  
Line 138: Line 138:
  
 <​note>​ <​note>​
-Aveți libertate să utilizați orice texturi doriți voi, împreună cu modificarea numărului de niveluri, comportamentului de împrăștiere a ramurilor pe un nivel, numărul de ramuri pe un nivel și regula de colorare prezentată mai sus, atâta timp cât texturile alese de voi și modificările realizate urmăresc scopul de simulare a suprafeței componentelor unui copac și au un rezultat vizual similar.+Aveți libertate să utilizați orice texturi doriți voi, împreună cu modificarea numărului de niveluri, comportamentului de împrăștiere a ramurilor pe un nivel, numărul de ramuri pe un nivel și regula de colorare prezentată mai sus, atâta timp cât texturile alese de voi și modificările realizate urmăresc scopul de simulare a suprafeței componentelor unui copac.
 </​note>​ </​note>​
  
Line 170: Line 170:
 </​code>​ </​code>​
  
-Texturile de culoare din interiorul obiectului de tip framebuffer creat de voi trebuie ​sa aiba aceeasi ​dimensiune precum textura de culoare din interiorul obiectului de tip framebuffer implicit, ce apartine ​ferestrei. Acest cod trebuie utilizat la finalul cadrului.+Texturile de culoare din interiorul obiectului de tip framebuffer creat de voi trebuie ​să aibă aceeași ​dimensiune precum textura de culoare din interiorul obiectului de tip framebuffer implicit, ce aparține ​ferestrei. Acest cod trebuie utilizat la finalul cadrului.
  
-=== Selectie destinatie ​===+=== Selecție destinație ​===
  
-Pentru a realiza procesul de selectie ​destinatieiin canalele de culoarea ​RGBale celei de-a doua texturi de culoare ale obiectului de tip framebuffer creat de voi, pastrati ​**coordonata (x, 0, z) a geometriei suport, ​dupa pasul de deformare pe baza hartii ​de inaltime si inainte ​de deformarea pe baza curburii**. Cele texturi de culoare pot fi vazute in imaginea de mai jos:+Pentru a realiza procesul de selecție ​destinațieiîn canalele de culoare ​RGB ale celei de-a doua texturi de culoare ale obiectului de tip framebuffer creat de voi, trebuie să se păstreze ​**coordonata (x, 0, z) a geometriei suport, ​după pasul de deformare pe baza hărții ​de înălțime și înainte ​de deformarea pe baza curburii**. Cele două texturi de culoare pot fi văzute în imaginea de mai jos:
  
-{{ :​ppbg:​tema:​terrain5.png?​800 |}}+{{ :​ppbg:​tema:​terrain5.png?​700 |}}
  
-Rezultatul vizual din imagine este obtinut dupa aplicarea ​deformarii ​pe baza curburii, dar coordonata (x, 0, z) pastrata in cea de-a doua textura ​de culoare este cea calculata inainte ​de realizarea curburii.+Rezultatul vizual din imagine este obținut după aplicarea ​deformării ​pe baza curburii, dar coordonata (x, 0, z) păstrată în cea de-a doua textură ​de culoare este cea calculată înainte ​de realizarea curburii. Această coordonată este utilizată pentru specificarea locației de destinație a elicopterului,​ fără să se țină cont de deformarea suprafeței asteroidului. Aceasta din urmă este doar un efect vizual realizat în vertex shader, cum s-a menționat anterior.
  
-Pentru a extrage coordonata (x, 0, z) din cea de-a doua textura ​de culoare din obiectul de tip framebuffer creat de voi, la momentul ​apasarii ​butonului dreapta de la mouse de catre utilizator, ​extrageti informatia ​din pixelul ​la care se afla cursorul la momentul ​apasarii ​butonului. Codul pentru acest proces ​arata in felul urmator:+Pentru a extrage coordonata (x, 0, z) din cea de-a doua textură ​de culoare din obiectul de tip framebuffer creat de voi, la momentul ​apăsării ​butonului dreapta de la mouse de către ​utilizator, ​trebuie extrasă informația ​din pixelul ​în dreptul căruia ​se află cursorul la momentul ​apăsării ​butonului. Codul pentru acest proces ​arată în felul următor:
  
 <code cpp> <code cpp>
Line 195: Line 195:
 </​code>​ </​code>​
  
-=== Selectie ​obiect ===+=== Selecție ​obiect ===
  
-Pentru a realiza procesul de selectie ​a unui obiect, se pastreaza ​suplimentar ​in canalul A din cea de-a doua textura ​de culoare a obiectului de tip framebuffer creat de voi un identificator pentru toate obiectele din scena. O prezentare ​vizuala ​a acestor identificatori,​ sub forma de nuante ​de gri, se poate vedea in imaginea de mai jos.+Pentru a realiza procesul de selecție ​a unui obiect, se păstrează ​suplimentar ​în canalul A din cea de-a doua textură ​de culoare a obiectului de tip framebuffer creat de voi un identificator pentru toate obiectele din scenă. O prezentare ​vizuală ​a acestor identificatori,​ sub formă ​de nuanțe ​de gri, se poate vedea în imaginea de mai jos.
  
-{{ :​ppbg:​tema:​selection.png?​800 |}}+{{ :​ppbg:​tema:​selection.png?​700 |}}
  
-Nuantele ​de gri din cea de-a doua textura ​de culoare din imaginea de mai sus au scop de prezentare pentru a se putea vizualiza identificatorul sub forma unei culori. ​Datorita faptului ca cea de-a doua textura ​de culoare ​contine informatie ​de tip ''​RGBA32F'',​ aceasta permite ​pastrarea ​unor valori ce depasesc ​valoarea 1.+Nuanțele ​de gri din cea de-a doua textură ​de culoare din imaginea de mai sus au scop de prezentare pentru a se putea vizualiza identificatorul sub forma unei culori. ​În situația în care cea de-a doua textură ​de culoare ​conține informație ​de tip ''​RGBA32F'',​ aceasta permite ​păstrarea ​unor valori ce depașesc ​valoarea 1.
  
 ==== Control elicopter ==== ==== Control elicopter ====
-Elicopterul ​se deplaseaza ​spre locatia ​de destinatie in momentul ​in care utilizatorul alege o astfel de destinatie ​prin apasarea ​butonului dreapta de la mouse. La momentul alegerii ​destinatiei, se plaseaza ​pe suprafata ​obiectul de marcaj prezentat mai sus si acesta ​ramane ​la pozitia respectiva pana la momentul ​in care elicopterul ajunge la destinatieIn momentul ​in care elicopterul se opreste, obiectul de marcaj al destinatiei ​dispare.+Elicopterul ​își începe deplasarea ​spre locația ​de destinație în momentul ​în care utilizatorul alege o astfel de locație ​prin apăsarea ​butonului dreapta de la mouse. La momentul alegerii ​destinației, se plasează ​pe suprafață ​obiectul de marcaj prezentat mai sus și acesta ​rămâne ​la poziția respectivă până ​la momentul ​în care elicopterul ajunge la destinațieÎn momentul ​în care elicopterul se oprește, obiectul de marcaj al destinației ​dispare.
  
-Atasat ​de elicopter se afla camera ​observator ce urmareste ​elicopterul. Suplimentar, ​in momentul ​deplasarii ​elicopterului,​ acesta este orientat cu fata spre directia ​de deplasare.+Atașat ​de elicopter se află cameră ​observator ce urmărește ​elicopterul. Suplimentar, ​în momentul ​deplasării ​elicopterului,​ acesta este orientat cu fața spre direcția ​de deplasare.
  
 === Comportament cameră observator === === Comportament cameră observator ===
  
-Î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:+Î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 urmează:
  
 <code cpp> <code cpp>
 auto camera = GetSceneCamera();​ auto camera = GetSceneCamera();​
  
-// pozitia relativa a camerei fata de pozitia ​personajului+// pozitia relativa a camerei fata de pozitia ​elicopterului
 glm::vec3 relativeCameraPosition = ...; glm::vec3 relativeCameraPosition = ...;
  
-// playerPosition ​este pozitia in lume a personajului ​controlat de jucator+// helicopterPosition ​este pozitia in lume a elicopterului ​controlat de jucator
 camera->​SetPositionAndRotation( camera->​SetPositionAndRotation(
-    ​playerPosition ​+ relativeCameraPosition,​+    ​helicopterPosition ​+ relativeCameraPosition,​
     glm::​quatLookAt(-glm::​normalize(relativeCameraPosition),​ glm::​vec3(0,​ 1, 0))     glm::​quatLookAt(-glm::​normalize(relativeCameraPosition),​ glm::​vec3(0,​ 1, 0))
 ); );
Line 227: Line 227:
 === Orientare elicopter === === Orientare elicopter ===
  
-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ă:+Pentru a orienta geometria ​elicopterului ​î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ă:
  
  
Line 244: Line 244:
  
   * Asteroidul (0.8p total)   * Asteroidul (0.8p total)
-    * Constructie si desenare geometrie suport - 0.3p +    * Construcție și desenare geometrie suport - 0.3p 
-      * NU este permisa utilizarea modelului ''​plane50.obj''​. ​Geometria suport trebuie ​generata ​din cod si trebuie ​sa aiba cel putin 10000 de varfuri+      * Geometria suport trebuie ​generată ​din cod și trebuie ​să aiba cel puțin ​10000 de vârfuri
-    * Desenare teren cu deformare pe baza hartii ​de inaltime ​+ multitexturare + curbura ​- 0.5p +    * Desenare teren cu deformare pe baza hărții ​de înălțime ​+ multitexturare + curbură ​- 0.5p 
-      * Aceasta cerinta ​NU se puncteaza partial. Trebuie realizate toate elementele specificate ​in cerinta+      * Această cerință ​NU se punctează parțial. Trebuie realizate toate elementele specificate ​în cerință pentru acordarea punctajului
-  * Selectie ​+ marcare ​selectie ​cu marcajul ​din demo animatie ​marcaj - 0.5p +  * Selecție prin apăsarea butonului dreapta de la mouse + marcare ​selecție ​cu marcajul ​descris ​animație ​marcaj - 0.5p 
-    * Aceasta cerinta ​NU se puncteaza partial. Trebuie realizate toate elementele specificate ​in cerinta.+    * Această cerință ​NU se punctează parțial. Trebuie realizate toate elementele specificate ​în cerință pentru acordarea punctajului.
   * Elicopterul (1p total)   * Elicopterul (1p total)
-    * Constructie si desenare geometrie elicopter - 0.2p +    * Construcție și desenare geometrie elicopter - 0.2p 
-    * Animatie ​cele 2 elice - 0.2p +    * Animație ​cele 2 elice - 0.2p 
-    * Camera ​ce urmareste ​elicopterul - 0.2p +    * Cameră ​ce urmărește ​elicopterul - 0.2p 
-    * Control ​prin selectie ​(0.4p total)+    * Control ​elicopter ​(0.4p total)
       * Deplasare elicopter - 0.2p       * Deplasare elicopter - 0.2p
-      * Orientare elicopter pe baza directiei ​de deplasare - 0.2p +      * Orientare elicopter pe baza direcției ​de deplasare - 0.2p 
-    * Depunctare: ​Lipsa plasare elicopter pe suprafata ​asteroidului - -0.2p+    * Depunctare: ​Lipsă ​plasare elicopter pe suprafața ​asteroidului - -0.2p
   * Copacul (0.7p total)   * Copacul (0.7p total)
-    * Constructie si desenare geometrie copac (0.6p total) +    * Construcție și desenare geometrie copac (0.6p total) 
-      * Constructie ​geometrie - 0.45p +      * Construcție ​geometrie - 0.45p 
-      * Aplicare ​textura ​cu mapare ​cilindrica ​- 0.15p +      * Aplicare ​textură ​cu mapare ​cilindrică ​- 0.15p 
-    * Disparitie ​copac prin selectie ​- 0.1p +    * Dispariție ​copac prin selecție cu butonul dreapta de la mouse - 0.1p 
-    * Depunctare: ​Lipsa plasare copac pe suprafata ​asteroidului - -0.2p+    * Depunctare: ​Lipsă ​plasare copac pe suprafața ​asteroidului - -0.2p
  
 ===== Exemple de funcționalități bonus ===== ===== Exemple de funcționalități bonus =====
Line 270: Line 270:
  
   * 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
-  * +  * Comportament de joc mai complex: 
 +    * Implementare inamici ce se deplaseaza pe suprafata asteroidului 
 +    * Implementare inamici ce se deplaseaza in aer, precum elicopterul controlat de catre jucator 
 +    * Implementare actiune de atac a jucatorului si a inamicilor 
 +  * Introducerea iluminarii:​ 
 +    * Introducerea umbrelor 
 +    * Introducerea iluminarii volumetrice
   * Orice aduce îmbunătățiri vizuale jocului   * Orice aduce îmbunătățiri vizuale jocului
  
ppbg/tema/2024.1733850467.txt.gz · Last modified: 2024/12/10 19:07 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