This shows you the differences between two versions of the page.
|
spg:teme:2019:01 [2019/11/04 07:37] ovidiu.dinu |
— (current) | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ==== 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. | ||
| - | |||
| - | {{ :spg:teme:2019:spgt1tri.png?nolink&200 |}} | ||
| - | |||
| - | 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 ( | ||
| - | |||
| - | Starea initiala a particulelor | ||
| - | |||
| - | {{ :egc:teme:2019:fb.png?nolink&768 |}} | ||
| - | |||
| - | |||
| - | === 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. | ||
| - | 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. | ||
| - | |||
| - | |||
| - | <note tip>Mai multe informatii despre ce reprezinta coliziunea si cum se poate implementa: | ||
| - | * [[https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection]] | ||
| - | * [[https://learnopengl.com/In-Practice/2D-Game/Collisions/Collision-detection]] | ||
| - | * [[https://www.youtube.com/watch?v=aTbw71EpamY]] | ||
| - | * [[https://developer.mozilla.org/en-US/docs/Games/Techniques/3D_collision_detection]] | ||
| - | </note> | ||
| - | |||
| - | |||
| - | === Bonus === | ||
| - | * Cioburi mai complexe | ||
| - | * reflexii/refractii mai physically accurate, e.g. [[parallax corrected cube maps]] | ||
| - | |||
| - | === Functionalitati obligatorii === | ||
| - | Barem orientativ pentru realizarea functionalitatilor (din 150 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 === | ||
| - | |||
| - | <note> | ||
| - | * 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 Explorer** -> **Clean Solution**, sau | ||
| - | * stergeti folderul __**/Visual Studio/obj**__ | ||
| - | * stergeti fisierul __**/Visual Studio/Framework_EGC.sdf**__ (in caz ca exista) | ||
| - | * stergeti fisierul __**/Visual Studio/Framework_EGC.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. | ||
| - | </note> | ||
| - | |||
| - | === Deadline tema === | ||
| - | 3 noiembrie ora 23:55 | ||