Differences

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

Link to this comparison view

egc:teme:2023:02 [2023/11/19 21:32]
robert.caragicu
egc:teme:2023:02 [2023/12/04 13:47] (current)
victor.asavei [Tema 2 - World of Tanks]
Line 2: Line 2:
   * **Responsabili:​** Anca Băluțoiu, Robert Caragicu, Florin Iancu, Vlad Novetschi   * **Responsabili:​** Anca Băluțoiu, Robert Caragicu, Florin Iancu, Vlad Novetschi
   * **Lansare:​** 20 noiembrie 2023   * **Lansare:​** 20 noiembrie 2023
-  * **Termen de predare:​** ​13 decembrie 2023, ora 23:59+  * **Termen de predare:​** ​15 decembrie 2023, ora 23:59
   * **Regulament:​** [[egc:​teme:​regulament|]]   * **Regulament:​** [[egc:​teme:​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ă!**
Line 10: Line 10:
 ==== Reguli generale de joc ==== ==== Reguli generale de joc ====
 Jocul se desfășoară pe un plan orizontal ce conține tancuri și clădiri. Scopul jocului este ca tancul jucătorului să distrugă cât mai multe tancuri inamice într-un timp limită (cel puțin 1 minut). Pentru fiecare tanc distrus jucătorul primește puncte. Jocul se desfășoară pe un plan orizontal ce conține tancuri și clădiri. Scopul jocului este ca tancul jucătorului să distrugă cât mai multe tancuri inamice într-un timp limită (cel puțin 1 minut). Pentru fiecare tanc distrus jucătorul primește puncte.
-Tancurile se deplasează înainte, înapoi și își pot roti corpul. Pentru a ținti după inamici turela tancului poate fi rotită. Proiectilele sunt lansate din vârful tunului și se deplasează rectiliniu și uniform pentru o durată de timp până când lovesc clădiri sau tancuri.+Tancurile se deplasează înainte, înapoi și își pot roti corpul. Pentru a ținti după inamici turela tancului poate fi rotită ​(cerință avansată). Proiectilele sunt lansate din vârful tunului și se deplasează rectiliniu și uniform pentru o durată de timp până când lovesc clădiri sau tancuri.
 Fiecare tanc rezistă la un număr de minim 3 lovituri de proiectil. Cu cât sunt mai avariate tancurile cu atât vor fi desenate mai deformate și mai înnegrite. Fiecare tanc rezistă la un număr de minim 3 lovituri de proiectil. Cu cât sunt mai avariate tancurile cu atât vor fi desenate mai deformate și mai înnegrite.
 Odată scurs timpul de joc, scena va ingheța; doar rotația turelei și a tunului vor mai fi posibile. Odată scurs timpul de joc, scena va ingheța; doar rotația turelei și a tunului vor mai fi posibile.
  
-Tancurile inamice se vor plimba aleator ​pe hartă fie pe un traseu predefinit (cerință de bază) fie vor urmări tancul jucătorului când este aproape de inamic ​(cerință avansată). Tancurile inamice își rotesc turela în direcția jucătorului în scopul de a trage proiectile înspre acesta.+Tancurile inamice se vor mișca ​pe hartă fie pe un traseu predefinit (cerință de bază) fie pe un traseu aleator ​(cerință avansată). Tancurile inamice își rotesc turela în direcția jucătorului în scopul de a trage proiectile înspre acesta.
  
 Un tanc complet avariat este imobil. Un tanc complet avariat este imobil.
  
-Jocul se termină fie când limita de timp este atinsă, fie când tancul jucătorului este distrus.În cazul în care timpul a expirat, în consolă se va afișa scorul. Scorul acumulat se consideră doar dacă timpul de joc a expirat. Dacă tancul jucătorului este distrus, atunci se afișează în consolă un mesaj corespunzător.+Jocul se termină fie când limita de timp este atinsă, fie când tancul jucătorului este distrus. În cazul în care timpul a expirat, în consolă se va afișa scorul. Scorul acumulat se consideră doar dacă timpul de joc a expirat. Dacă tancul jucătorului este distrus, atunci se afișează în consolă un mesaj corespunzător.
  
 ==== Detalii de implementare ==== ==== Detalii de implementare ====
Line 26: Line 26:
 {{ :​egc:​teme:​2023:​tanc_simplu_2.png?​200 |}} {{ :​egc:​teme:​2023:​tanc_simplu_2.png?​200 |}}
  
-Un tanc este format dintr-un corp, turelă, tun și șenile. Corpul este paralelipipedul cel mare. Atașat de corp este turela formată tot dintr-un paralelipiped. Turela este atașată de corp și se rotește stânga dreapta după metoda descrisă în capitolul Rotație Turelă Tanc. Atașat de turelă este un tun format dintr-un cilindru. Tunul se rotește sus jos în jurul unui pivot descris în capitolul Rotație tun tanc. Atașat de corp se găsesc două paralelipipede care reprezintă șenilele tancului.+Un tanc este format dintr-un corp, turelă, tun și șenile. Corpul este paralelipipedul cel mare. Atașat de corp este turela formată tot dintr-un paralelipiped. Turela este atașată de corp și se rotește stânga dreapta după metoda descrisă în capitolul Rotație Turelă Tanc. Atașat de turelă este un tun format dintr-un cilindru. Atașat de corp se găsesc două paralelipipede care reprezintă șenilele tancului.
 Tancul va fi desenat în 3 culori pentru a distinge elementele sale. Astfel corpul vor avea o culoare, turela altă culoare iar tunul și șenilele altă culoare. Tunul și șenilele au aceeași culoare. Tancul va fi desenat în 3 culori pentru a distinge elementele sale. Astfel corpul vor avea o culoare, turela altă culoare iar tunul și șenilele altă culoare. Tunul și șenilele au aceeași culoare.
  
Line 100: Line 100:
 </​note>​ </​note>​
  
-== Cum atacă Inamicii? ==+== Cum atacă Inamicii? ​(cerință avansată) ​==
  
 Atunci cand jucătorul este destul de aproape de un inamic, turela inamicului se va învârti către jucător si va trage spre acesta. Atunci cand jucătorul este destul de aproape de un inamic, turela inamicului se va învârti către jucător si va trage spre acesta.
Line 132: Line 132:
  
 Directia in care trebuie sa le deplasam poate fi calculata astfel: Directia in care trebuie sa le deplasam poate fi calculata astfel:
 +<​code>​
 Dif = ( Centru_Tanc_2 - Centru_Tanc_1 ) Dif = ( Centru_Tanc_2 - Centru_Tanc_1 )
 P = |P| * glm::​Normalize( Dif )  P = |P| * glm::​Normalize( Dif ) 
- 
- 
 Centru_Tanc_1 ​ += P * -0.5f; Centru_Tanc_1 ​ += P * -0.5f;
 Centru_Tanc_2 ​ += P * 0.5f; Centru_Tanc_2 ​ += P * 0.5f;
 +</​code>​
  
 == Coliziunea Tanc - Clădire == == Coliziunea Tanc - Clădire ==
Line 148: Line 148:
 == Deformare formă inamic == == Deformare formă inamic ==
  
-Obiectele ce reprezintă tancurile inamice (cu sau fără turelă, la libera alegere) se vor deforma în funcție de gradul de avarie al fiecăruia (HP) ; acesta va fi trimis către vertex shader, acolo unde se va realiza deformarea.+Obiectele ce reprezintă tancurile inamice (cu sau fără turelă, la libera alegere) se vor deforma în funcție de gradul de avarie al fiecăruia (HP); acesta va fi trimis către vertex shader, acolo unde se va realiza deformarea.
  
 Deformarea va fi o funcție matematică (la libera alegere) ce va primi gradul de avarie (un număr) și coordonatele locale ale unui vertex (un vector), si va calcula un deplasament (un vector) care va fi aplicat coordonatelor locale ale respectivului vertex (înainte de aplicarea matricilor MVP). Deformarea va fi o funcție matematică (la libera alegere) ce va primi gradul de avarie (un număr) și coordonatele locale ale unui vertex (un vector), si va calcula un deplasament (un vector) care va fi aplicat coordonatelor locale ale respectivului vertex (înainte de aplicarea matricilor MVP).
Line 174: Line 174:
   * Coliziuni 25p   * Coliziuni 25p
     * Proiectil - inamic 15p     * Proiectil - inamic 15p
-    * Tanc - tanc 5p+    * Tanc - tanc 10p
   * Avarie inamici 25p   * Avarie inamici 25p
     * Trimis către shader HP-ul tancului 5p     * Trimis către shader HP-ul tancului 5p
Line 197: Line 197:
 === Rotația tunului tancului === === Rotația tunului tancului ===
 {{ :​egc:​teme:​2023:​pivot_rotatie.png?​300 |}} {{ :​egc:​teme:​2023:​pivot_rotatie.png?​300 |}}
-{{ :​egc:​teme:​2023:​rotire_turela_si_tun.gif |}}+ 
 + 
 +{{ :​egc:​teme:​2023:​rotire_turela_si_tun.gif?500 |}}
 Tunul se va roti pentru a ținti în sus și jos prin mișcarea mouse-ului în sus și jos. Rotația este în jurul pivotului indicat de figură pe planul local zoy sau xoy (depinde care direcție este considerată cea din față). Pivotul este punctul galben și planul de rotație este cel ce conține cercul roșu. În animație sunt prezentate cum lucrează cele două rotații pentru ca tancul să poată ținti oriunde. Tunul se va roti pentru a ținti în sus și jos prin mișcarea mouse-ului în sus și jos. Rotația este în jurul pivotului indicat de figură pe planul local zoy sau xoy (depinde care direcție este considerată cea din față). Pivotul este punctul galben și planul de rotație este cel ce conține cercul roșu. În animație sunt prezentate cum lucrează cele două rotații pentru ca tancul să poată ținti oriunde.
  
 === Traiectorie parabolă a proiectilului === === Traiectorie parabolă a proiectilului ===
-{{ :​egc:​teme:​2023:​animatie_tras_cu_bolta.gif |}}+{{ :​egc:​teme:​2023:​animatie_tras_cu_bolta.gif?500 |}}
 Proiectilul va avea mișcare balistică după cum este prezentat în animație. Se aplică legea gravitației. Astfel viteza inițială a proiectilului este direcția tunului înmulțită cu o constantă. În fiecare cadru algoritmul următor descrie mișcarea proiectilului:​ Proiectilul va avea mișcare balistică după cum este prezentat în animație. Se aplică legea gravitației. Astfel viteza inițială a proiectilului este direcția tunului înmulțită cu o constantă. În fiecare cadru algoritmul următor descrie mișcarea proiectilului:​
   * viteza.y -= gravitatie * deltaTime   * viteza.y -= gravitatie * deltaTime
egc/teme/2023/02.1700422376.txt.gz · Last modified: 2023/11/19 21:32 by robert.caragicu
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