Differences

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

Link to this comparison view

egc:laboratoare:01 [2021/10/02 13:13]
victor.asavei [Cerințe generale de laborator]
egc:laboratoare:01 [2023/10/09 10:07] (current)
andrei.lambru [Laboratorul 1]
Line 2: Line 2:
  
  
-**Video Laborator 1**: https://www.youtube.com/watch?​v=YlzFkjJjh4Q.\\+**Video Laborator 1**:​https://​youtu.be/Hh-geX8VvxA ​.\\
 **Autor**: [[anca.morar@cs.pub.ro | Anca Morar]] **Autor**: [[anca.morar@cs.pub.ro | Anca Morar]]
- 
 ==== Introducere ==== ==== Introducere ====
  
Line 88: Line 87:
     * **/core**     * **/core**
       * API-ul de bază al framwork-ului GFX       * API-ul de bază al framwork-ului GFX
-      * **/gPU**+      * **/gpu**
         * __gpu_buffers.cpp__         * __gpu_buffers.cpp__
           * Asigură suportul pentru definirea de buffere de date și încărcarea de date (modele 3D) pe GPU           * Asigură suportul pentru definirea de buffere de date și încărcarea de date (modele 3D) pe GPU
Line 171: Line 170:
 === Etapele rulării aplicației === === Etapele rulării aplicației ===
  
-  - Se definesc proprietățile pentru fereastra de lucru (''​Main.cpp''​)+  - Se definesc proprietățile pentru fereastra de lucru (''​main.cpp''​)
   - Se inițializează Engine-ul astfel - ''​Engine::​Init()''​   - Se inițializează Engine-ul astfel - ''​Engine::​Init()''​
     - Se inițializează API-ul OpenGL (''​glfwInit()''​)     - Se inițializează API-ul OpenGL (''​glfwInit()''​)
Line 177: Line 176:
       - Se atașează evenimentele de fereastră prin intermediul __WindowsCallbacks.cpp__       - Se atașează evenimentele de fereastră prin intermediul __WindowsCallbacks.cpp__
     - Se inițializează managerul de texturi     - Se inițializează managerul de texturi
-  - Se creează și inițializează o nouă scenă 3D de lucru având la bază modelul de update prezentat anterior (__Main.cpp__)+  - Se creează și inițializează o nouă scenă 3D de lucru având la bază modelul de update prezentat anterior (__main.cpp__)
   - Se pornește rularea scenei încărcate (''​LoopUpdate()''​)   - Se pornește rularea scenei încărcate (''​LoopUpdate()''​)
  
Line 204: Line 203:
 ==== Cerințe generale de laborator ==== ==== Cerințe generale de laborator ====
  
-  * Citiți cu foarte mare atenție ​Framwork-ul de laborator întrucât îl veți utiliza pe tot parcursul laboratorului de EGC inclusiv și la temele de casă+  * Citiți cu foarte mare atenție ​Framework-ul de laborator întrucât îl veți utiliza pe tot parcursul laboratorului de EGC inclusiv și la temele de casă
   * Citiți comentariile din cod – ar trebui să răspundă la majoritatea întrebărilor pe care le aveți   * Citiți comentariile din cod – ar trebui să răspundă la majoritatea întrebărilor pe care le aveți
   * Citiți documentația de la [[ https://​github.com/​UPB-Graphics/​gfx-framework/​blob/​master/​src/​core/​window/​input_controller.cpp | __input_controller.h__]] întrucât veți utiliza constant funcțiile din cadrul acestei clase (prin suprascriere) pentru definirea de interacțiuni și comportament personalizat   * Citiți documentația de la [[ https://​github.com/​UPB-Graphics/​gfx-framework/​blob/​master/​src/​core/​window/​input_controller.cpp | __input_controller.h__]] întrucât veți utiliza constant funcțiile din cadrul acestei clase (prin suprascriere) pentru definirea de interacțiuni și comportament personalizat
Line 214: Line 213:
 Conceptele utilizate în cadrul laboratorului și care trebuie știute sunt: Conceptele utilizate în cadrul laboratorului și care trebuie știute sunt:
   * concepte de bază de OOP - obiecte, moștenire, metode virtuale, etc   * concepte de bază de OOP - obiecte, moștenire, metode virtuale, etc
-  * utilizarea bibliotecilor standard: în special [[http://​www.cplusplus.com/​reference/​vector/​vector/​ | std::​vector]],​ [[ http://​www.cplusplus.com/​reference/​list/​list/​ | std::list ]] și [[ http://​www.cplusplus.com/​reference/​unordered_map/​unordered_map/​ | std::unorderd_map ​]]+  * utilizarea bibliotecilor standard: în special [[http://​www.cplusplus.com/​reference/​vector/​vector/​ | std::​vector]],​ [[ http://​www.cplusplus.com/​reference/​list/​list/​ | std::list ]] și [[ http://​www.cplusplus.com/​reference/​unordered_map/​unordered_map/​ | std::unordered_map ​]]
    
 <note tip> <note tip>
Line 220: Line 219:
 </​note>​ </​note>​
  
-== Generare ​si compilare == +== Generare ​și compilare == 
-  * Pentru generarea ​solutiilor ​compilabile pentru platformele suportate, framework-ul ​foloseste ​[[https://​github.com/​Kitware/​CMake/​|CMake]] +  * Pentru generarea ​soluțiilor ​compilabile pentru platformele suportate, framework-ul ​folosește ​[[https://​github.com/​Kitware/​CMake/​|CMake]] 
-  * Platformele suportate ​in acest moment de framework sunt+  * Platformele suportate ​în acest moment de framework sunt:
     * Windows (stabil)     * Windows (stabil)
     * Linux (experimental)     * Linux (experimental)
     * macOS (experimental)     * macOS (experimental)
-  * Pentru generarea ​solutiei ​pentru platforma ​doritaurmati pasii de instalare ​si generare ​descrisi ​la [[https://​github.com/​UPB-Graphics/​gfx-framework|GFX Framework]]+  * Pentru generarea ​soluției ​pentru platforma ​dorităurmați pașii ​de instalare ​și generare ​descriși ​la [[https://​github.com/​UPB-Graphics/​gfx-framework|GFX Framework]]
  
-== Visual Studio ​2019 == +== Visual Studio ​2022 == 
-  * În cadrul laboratorului vom utiliza [[https://​www.visualstudio.com/​vs/​community/​|Visual Studio ​2019 Community Edition]]+  * În cadrul laboratorului vom utiliza [[https://​www.visualstudio.com/​vs/​community/​|Visual Studio ​2022 Community Edition]]
   * Installer-ul de Visual Studio vine cu posibilitatea de a instala modular doar ceea ce este necesar. Pentru acest laborator trebuie instalat doar modulul default **Desktop development with C++**, care se regăsește în **Workloads**   * Installer-ul de Visual Studio vine cu posibilitatea de a instala modular doar ceea ce este necesar. Pentru acest laborator trebuie instalat doar modulul default **Desktop development with C++**, care se regăsește în **Workloads**
-  * Dupa generarea cu CMake, framework-ul va conține in folderul de **/build** un proiect pentru Visual Studio: __GFXFramework.sln__+  * După generarea cu CMake, framework-ul va conține in folderul de **/build** un proiect pentru Visual Studio: __GFXFramework.sln__
   * Deschideți soluția în Visual Studio   * Deschideți soluția în Visual Studio
  
 <note tip> <note tip>
 Cei care nu au mai utilizat IDE-ul **Visual Studio** pentru scrierea de aplicații C++ sunt rugați să citească toturialul [[https://​msdn.microsoft.com/​en-us/​library/​jj620919.aspx#​BKMK_CreateApp | Getting Started with C++ in Visual Studio]] Cei care nu au mai utilizat IDE-ul **Visual Studio** pentru scrierea de aplicații C++ sunt rugați să citească toturialul [[https://​msdn.microsoft.com/​en-us/​library/​jj620919.aspx#​BKMK_CreateApp | Getting Started with C++ in Visual Studio]]
 +</​note>​
 +
 +<note tip>
 +Cei care doresc sa folosească **Linux** sau **macOS** pot face acest lucru, însă **atenție**,​ suportul în acest moment este experimental (au fost testate funcționalitățile de bază pe unele din cele mai folosite distribuții) și pot apărea diverse bug-uri în funcție de implementarea de pe aceste platforme.
 </​note>​ </​note>​
  
Line 266: Line 269:
 === Informații laborator === === Informații laborator ===
  
-<note important>​ Sursele ce stau la baza fiecărui laborator se află în directorul: __/Source/Laboratoare/Laborator**N**/__, **N** reprezentând numărul laboratorului.+<note important>​ Sursele ce stau la baza fiecărui laborator se află în directorul: __/src/lab_m1/lab**N**/__, **N** reprezentând numărul laboratorului.
 </​note>​ </​note>​
  
Line 313: Line 316:
  
   - Descărcați framework-ul,​ compilați și rulați proiectul   - Descărcați framework-ul,​ compilați și rulați proiectul
-    * Trebuie să deschideți proiectul ​Framework_EGC.sln (folderul __/Visual Studio__) în Visual Studio 2019+    * Trebuie să deschideți proiectul ​GFXFramework.sln (din folderul ​de __/build__) în Visual Studio 2019
   - Încărcați un alt model 3D și randați-l în scenă la o poziție diferită față de cele 2 cuburi   - Încărcați un alt model 3D și randați-l în scenă la o poziție diferită față de cele 2 cuburi
-    * __/Resources/Models__ ​conține o serie de modele 3D ce pot fi încărcate +    * __/assets/models__ ​conține o serie de modele 3D ce pot fi încărcate 
-    * În ''​Laborator1::​Init()''​ găsiți modul în care puteți să declarați (și încărcați) un nou obiect de tip ''​Mesh''​+    * În ''​Lab1::​Init()''​ găsiți modul în care puteți să declarați (și încărcați) un nou obiect de tip ''​Mesh''​
   - La apăsarea unei taste să se schimbe culoarea de ștergere a ecranului   - La apăsarea unei taste să se schimbe culoarea de ștergere a ecranului
-  - La apăsarea unei taste să se schimbe ​obiectul afisat ​(render) ​la o poziție (să cicleze prin 3 obiectede ex cube, teapot, sphere)+  - La apăsarea unei taste să se schimbe ​forma/​mesh-ul unuia dintre obiectele afisate ​(render) ​astfel incat să se cicleze prin 3 obiecte ​(de ex cube, teapot, sphere)
   - Să se miște prin spațiu un obiect oarecare la apăsarea tastelor W, A, S, D, E, Q (pozitiv și negativ pe toate cele 3 axe)   - Să se miște prin spațiu un obiect oarecare la apăsarea tastelor W, A, S, D, E, Q (pozitiv și negativ pe toate cele 3 axe)
  
  
-<note important>​Citiți cu atenție documentația evenimentelor de input din fișierul ''​[[https://​github.com/​UPB-Graphics/​Framework-EGC/​blob/​master/​Source/Core/Window/InputController.h | InputController.h]]''​ întrucât le veți utiliza în cadrul fiecărui laborator</​note>​+<note important>​Citiți cu atenție documentația evenimentelor de input din fișierul ''​[[https://​github.com/​UPB-Graphics/​gfx-framework/​blob/​master/​src/core/window/input_controller.h | input_controller.h]]''​ întrucât le veți utiliza în cadrul fiecărui laborator</​note>​
  
  
 <​hidden>​ <​hidden>​
 +Cerinte alternative:​
 +  * 3.1 La apăsarea unei taste să se faca toggle intre utilizarea apelului glClear si neutilizarea lui, sa vada rezultatul care apare cand nu se sterge ecranul.
 +  * 3.2 La apasarea a 3 taste diferite sa schimbe culoarea de ștergere a ecranului. Fiecare tasta schimba explicit o anumita culoare: tasta 1 -> rosu, tasta 2 -> galbel si tasta 3 -> cyan. In felul acesta se obisnuiesc putin si cu modelul de culoare.
 +  * 4.1 Unul dintre cele 3 forme prin care se cicleaza sa fie format din doua modele 3d, de exemplu teapot care sta pe box.
 +  * 5.1 Sa se aplice deplasarea pe obiectul prin care se cicleaza ​
 +  * 5.2 Suplimentar,​ la apasarea tastelor Z si X sa se schimbe scara obiectului, continuu, cu window->​KeyHold().
 +
 Bonusuri posibile: Bonusuri posibile:
   * Rotația continuă a unui obiect în jurul unui punct, cu o anumită rază.   * Rotația continuă a unui obiect în jurul unui punct, cu o anumită rază.
-  * Implementarea acțiunii de a sări aplicată pe un obiect (există un model 3D uman la __/​Resources/​Models/​Characters/​Archer/​Archer.fbx__).+  * Implementarea acțiunii de a sări aplicată pe un obiect (există un model 3D uman la __assets\models\characters\archer\Archer.fbx__).
   * Când e apasată tasta **CTRL** (sau alt modifier) și una din tastele W, A, S, D, E, Q, să deplaseze obiectul doar o singură dată în direcția corespunzătoare cu 1 unitate (sau oricât doresc ei). Cereți să trateze acest comportament împreună cu cel de deplasare continuă la apăsarea tastelor de mai sus când nu intră în combinație cu tasta modifier aleasă.   * Când e apasată tasta **CTRL** (sau alt modifier) și una din tastele W, A, S, D, E, Q, să deplaseze obiectul doar o singură dată în direcția corespunzătoare cu 1 unitate (sau oricât doresc ei). Cereți să trateze acest comportament împreună cu cel de deplasare continuă la apăsarea tastelor de mai sus când nu intră în combinație cu tasta modifier aleasă.
 </​hidden>​ </​hidden>​
egc/laboratoare/01.1633169629.txt.gz · Last modified: 2021/10/02 13:13 by victor.asavei
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