Differences

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

Link to this comparison view

egc:laboratoare:01 [2021/10/02 13:31]
victor.asavei [Laboratorul 1]
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
  
Line 239: Line 238:
  
 <note tip> <note tip>
-Cei care doresc sa foloseasca ​**Linux** sau **macOS** pot face acest lucru, ​insa **atentie**, suportul ​in acest moment este experimental (au fost testate ​functionalitatile ​de baza pe unele din cele mai folosite ​distributiisi pot aparea ​diverse bug-uri ​in functie ​de implementarea de pe aceste platforme.+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 322: Line 321:
     * În ''​Lab1::​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)
  
Line 330: Line 329:
  
 <​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ă.
egc/laboratoare/01.1633170662.txt.gz · Last modified: 2021/10/02 13:31 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