This shows you the differences between two versions of the page.
spg:teme:2019:01 [2019/11/04 07:43] 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, 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. | ||
- | |||
- | |||
- | <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. [[https://youtu.be/Bvar6X0dUGs]], [[https://youtu.be/K2rs7K4y_sY]] | ||
- | * Orice aduce un plus semnificativ de realism | ||
- | |||
- | === 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_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. | ||
- | </note> | ||
- | |||
- | === Deadline tema === | ||
- | 3 noiembrie ora 23:55 |