Tema 1 - Glass Shatters

Scopul temei este aprofundarea notiunilor framebuffer, reflexia si refractia luminii, sisteme de particule.

Cioburile

Se doreste simularea spargerii unui obiect simplu din sticla cu ajutorul unui sistem de particule in care fiecare particula reprezinta un ciob.

Pozitiile initiale ale particulelor reprezinta obiectul intact, inainte sa fie spart.

Utilizand Geometry Shader, se expandeaza fiecare primitiva (vertex(ca in exemplu) sau triunghi) a obiectului in forme geometrice simple precum un tetraedru sau un triunghi cu adancime (ca in exemplu, 8 triunghiuri, Fig 2).

Obiecte in scena

Scena trebuie sa aiba obiecte animate(animatii simple). Minimul necesar este un obiect care sparge geamul. Pentru ca vom avea refexie si refractie in timp real.

Reflexia si refractia

Obiectul din sticla reflecta si refracta celelalte obiecte din scena in timp real, in special pe cel care il crapa. Trebuie sa va creati voi o clasa modificata FrameBuffer pentru cube map in care randati, din punctul ce reprezinta centrul obiectului, 6 vederi patrate(fetele cubului: fata, spate, stanga, dreapta, sus, jos) cu intreaga scena cu obiecte animate.

Redarea scenei in cubemap se face cu proiectie perspectiva cu FoV=90grade si aspectRatio=1 ca sa fie incadrat tot mediul. Pentru ca avem reflexie & refractie real-time, randam in cubemap la fiecare frame.

Normalele in World Space vor fi calculate tot in acest pas, folosind rotatia particulei sau cu produs vectorial. Aceasta rotatie trebuie adaugata ca informatie in SSBO, pe langa pozitie, pozitie initiala, viteza, viteza initiala. Rotatia initiala e nula.

Starea initiala a particulelor reprezinta obiectul inainte sa fie spart.

Detalii de implementare

Simularea trebuie sa poata fi repornita la runtime. Nu ne intereseaza coliziuni pentru cioburile obiectului spart, puteti pleca prin modificarea codului din Lab5, cioburile au doar o viteza initiala si sunt trase in jos de gravitatie. Fiecare ciob trebuie sa aiba si o rotatie.

Veti avea un buton care arata normalele(shiftate din (-1,1) in (0,1) pe fiecare componenta X,Y,Z). Hint: prima data afisati normalele pentru a asigura corectitudinea reflexie si refractiei. Veti avea un buton care permite afisarea wireframe. Veti avea doua butoane pentru dilatarea si contractarea timpului, practic folositi o variabila timeScale = 1 initial pentru a inlocui deltaTime cu deltaTime * timeScale oriunde cel dintai e folosit.

Bonus

Functionalitati obligatorii

Barem orientativ pentru realizarea functionalitatilor (din 100 puncte):

  • spargere obiect in cioburi cu sistemul de particule (35p)
  • calcul normale pentru fiecare ciob + reflectie & refractie(25p)
  • toggle afisare normale, afisare wireframe(20p)
  • reset simulation @runtime (10p)
  • time dilation/contraction(5p)
  • readme (5p)

Intrebari si raspunsuri

Pentru intrebari vom folosi forumurile de pe moodle.

Notare

Baremul este orientativ. Fiecare asistent are o anumita libertate in evaluarea temelor (de exemplu, sa dea punctaj partial pentru implementarea incompleta a unei functionalitati sau sa scada pentru hard coding). Acelasi lucru este valabil atat pentru functionalitatile obligatorii, cat si pentru bonusuri.

Tema trebuie incarcata pe moodle. Pentru a fi punctata, tema trebuie prezentata la laborator. Vor exista laboratoare speciale de prezentare a temelor (care vor fi anuntate).

Indicatii suplimentare

Tema va fi implementata in OpenGL si C++. Este indicat sa folositi framework-ul si Visual Studio.

Pentru implementarea temei, in folderul Source/Laboratoare/ puteti crea un nou folder, de exemplu Tema1, cu fisierele Tema1.cpp si Tema1.h (pentru implementare POO, este indicat sa aveti si alte fisiere). Pentru a vedea fisierele nou create in Visual Studio in Solution Explorer, apasati click dreapta pe filtrul Laboratoare si selectati Add→New Filter. Dupa ce creati un nou filtru, de exemplu Tema1, dati click dreapta si selectati Add→Existing Item. Astfel adaugati toate fisierele din folderul nou creat. In fisierul LabList.h trebuie adaugata si calea catre header-ul temei. De exemplu: #include <Laboratoare/Tema1/Tema1.h>

Arhivarea proiectului

  • in mod normal arhiva trebuie sa contina toate resursele necesare compilarii si rularii
  • inainte de a face arhiva asigurati-va ca ati dat clean la proiect
    • click dreapta pe proiect in Solution ExplorerClean Solution, sau
    • stergeti folderul /Visual Studio/obj
  • stergeti fisierul /Visual Studio/Framework_SPG.sdf (in caz ca exista)
  • stergeti fisierul /Visual Studio/Framework_SPG.VC.db (in caz ca exista)
  • stergeti folderul /.vs (in caz ca exista)
  • stergeti folderul /x64 sau /x86 (in caz ca exista)
    • executabilul final este generat in folderul /x86 sau /x64 la finalul link-editarii in functie de arhitectura aleasa la compilare (32/64 biti)
  • in cazul in care arhiva tot depaseste limita de 20MB (nu ar trebui), puteti sa stergeti si folderul /libs sau /Resources intrucat se pot adauga la testare. Nu este recomandat sa faceti acest lucru intrucat ingreuneaza mult testarea in cazul in care versiunea curenta a librariilor/resurselor difera de versiunea utilizata la momentul scrierii temei.

Deadline tema

24 noiembrie ora 23:55

spg/teme/2019/01.txt · Last modified: 2019/11/04 11:15 by ovidiu.dinu
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