This is an old revision of the document!


Tema 3 - Worms 3D

  • Responsabili: Cristian Lambru
  • Lansare: 6 decembrie
  • Termen de predare: 12 ianuarie 2020, ora 23:55
  • Notă: Orice informație ce nu a fost acoperită în acest document este la latitudinea voastră!

În cadrul temei 2 trebuie să implementați un joc în care sunteți un aviator ce nu trebuie să se lovească de obstacole și nici să rămână fără combustibil pentru avion.

Constructia Scenei

Definim o suprafata de baleiere descrisa de functia:

$$ f(x,z) = y $$

Datorita constructiei, o astfel de suprafata poate fi determinata direct de continutul unei texturi in urmatorul mod:

$$ f(x,z) = texture2D(unitTexture,vec2 (u,v)) $$

unde $\{u, v\}$ reprezinta coordonatele de textura asociate coordonatelor spatiale $\{x,z\}$.

Aceste tipuri de texturi care descriu suprafete de baleiere se numesc harti de inaltime sau height maps. Ele contin in fiecare pixel o singura informatie in $[0,255]$ (normalizat $[0,1]$), pe un singur canal, ce reprezinta inaltimea zonei acoperite de pixelul respectiv. Un astfel de exemplu de textura se poate vedea mai jos.

Pentru a putea crea o suprafata definita de inaltimea data de textura este necesara o geometrie suport care sa cuprinda toate coordonatele $\{x,z\}$ finale si toate coordonatele y egale cu 0. De asemenea, fiecarui vertex trebuie sa i se asocieze o coordonata de textura, $\{u,v\} \in [0, 1]$, normalizata intre limitele geometriei pe x si pe y. In mod particular, geometria din imaginea de mai jos a fost generata cu 100 de linii si 100 de coloane, pe o suprafata de 5×5 unitati.

Geometria suport se deseneaza cu un shader special, care la pasul de vertex shader acceseaza textura in care sunt salvate inaltimile. Se obtine valoarea culoarea de la coordonatele $\{u,v\}$ asociate si se obtine o valoare in $[0,1]$. Aceasta valoare reprezinta inaltimea, coordonata y a vertexului, care se poate scala, dupa plac. O desenare a geometriei generate anterior cu inaltimile obtinute din textura de mai sus si cu factorul de scalare al inaltimii egal cu 2 va avea rezultatul din imaginea de mai jos.

Mai multe informatii despre coliziuni si cum se pot implementa in 3D:

Interfața cu utilizatorul

Atât viețile rămase, cât și combustibilul disponibil vor fi afișate pe ecran. Pentru acest lucru se pot folosi orice forme sau metode care să exprime acest lucru: sugerăm folosirea unor sfere pentru vieți și două dreptunghiuri suprapuse pentru combustibil (unul negru în spate și unul colorat în față, care se va scala pentru a evidenția consumarea combustibilului).

Bonusuri Posibile

Pe lângă obstacole sau combustibil, pot să existe și alte obiecte specifice în scenă ce aduc anumite beneficii/dezavantaje (de exemplu, o sferă galbenă poate aduce o viață în plus sau un cub verde face avionul invincibil pentru o perioadă de timp, sau poate trage proiectile pentru distrugerea obstacolelor etc.).

  • Avion realist: corpul avionului nu va fi un simplu cub/paralelipiped, ci va fi mai îngust spre coadă și mai larg spre față. De asemenea, elicea avionului trebuie să se rotească în conformitate cu accelerația avionului (de exemplu dacă accelerează se rotește mai repede, altfel mai încet).

  • Pilot: pilotul va fi creat asemănător avionului, folosind mai multe forme simple de mărimi și culori diferite. Pentru că pilotul avionului este un pilot fabulos, acesta va avea pletele în vânt. Astfel, folosind simple translatări ale formelor ce alcătuiesc părul, se va crea impresia că părul acestuia este în bătaia vântului, sau se pot folosi de asemenea deformări în Vertex Shader pentru simularea mișcării părului

  • Creșterea dificultății jocului pe măsură ce trece timpul
  • Avionul scoate fum cand accelereaza
  • În momentul coliziunii, obiectele se sparg în mai multe bucățele (ca în video)
  • Iluminare: Avionul are lumini de tip spot în fața avionului

Notare (150p)

  • Construcția avionului (total 30p)
    • Componente (10p)
    • Deplasare (10p)
    • Animații (10p)
  • Construcția mediului (total 70p)
    • Marea (obiect + deformare animata in shader) (30p)
    • Norii (15p)
    • Combustibil (15p)
    • Obstacole (10p)
  • Interfața cu utilizatorul (10p)
  • Implementarea camerei third person (20p)
  • Implementarea camerei first person (20p)

Arhivarea proiectului

  • În mod normal arhiva trebuie să conțină toate resursele necesare compilării și rulării
  • Înainte de a face arhiva asigurați-vă că ați dat clean la proiect
    • Click dreapta pe proiect în Solution ExplorerClean Solution, sau
    • Ștergeți folderul /Visual Studio/obj
  • Ștergeți fișierul /Visual Studio/Framework_EGC.sdf (în caz că există)
  • Ștergeți fișierul /Visual Studio/Framework_EGC.VC.db (în caz că există)
  • Ștergeți folderul /.vs (în caz că există)
  • Ștergeți folderul /x64 sau /x86 (în caz că există)
    • Executabilul final este generat în folderul /x86 sau /x64 la finalul link-editării în funcție de arhitectura aleasă la compilare (32/64 biți)
  • În cazul în care arhiva tot depășește limita de 20MB (nu ar trebui), puteți să ștergeți și folderul /libs sau /Resources întrucât se pot adăuga la testare. Nu este recomandat să faceți acest lucru întrucât îngreunează mult testarea în cazul în care versiunea curentă a bibliotecilor/resurselor diferă de versiunea utilizată la momentul scrierii temei.

egc/teme/2019/10.1575490780.txt.gz · Last modified: 2019/12/04 22:19 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