Differences

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

Link to this comparison view

egc:laboratoare:02 [2021/10/18 13:17]
victor.asavei [Topologie]
egc:laboratoare:02 [2023/10/18 19:11] (current)
mihnea.mitrache [Face Culling]
Line 90: Line 90:
 glCullFace(GL_BACK);​ glCullFace(GL_BACK);​
 </​code>​ </​code>​
 +
 +<​note>​ În concluzie, atunci când ne propunem să definim geometria unui 
 +obiect este foarte importantă ordinea specificării indicilor.
 +</​note>​
 +
 +<note tip> Pentru o definire corectă se pot urma pașii:
 +  - Ne fixăm privirea pe o anumită axa.
 +  - Identificăm fețele vizibile și cele nevizibile.
 +  - Triunghiurile care alcătuiesc fețele vizibile se specifică în ordine trigonometrică iar cele nevizibile în ordinea inversă.
 +</​note>​
 +
 +{{ :​egc:​laboratoare:​lab02:​cull_face.png?​750 |}}
 +
 +<note warning>​Dacă vă întrebați de ce după ce ați activat CULL_FACE obiectele voastre nu arată ​
 +corect, cel mai probabil ați fost inconsecvenți în ceea ce privește ordinea de specificare a 
 +indicilor.
 +</​note>​
  
 ===== Meshe ===== ===== Meshe =====
  
-Un „mesh” este un obiect tridimensional definit prin vârfuri și indici. În laborator aveți posibilitatea să încărcați meshe în aproape orice format posibil prin intermediul clasei [[https://​github.com/​UPB-Graphics/​Framework-EGC/​blob/​master/​Source/Core/GPU/Mesh.h#L67|Mesh]].+Un „mesh” este un obiect tridimensional definit prin vârfuri și indici. În laborator aveți posibilitatea să încărcați meshe în aproape orice format posibil prin intermediul clasei [[https://​github.com/​UPB-Graphics/​gfx-framework/​blob/​master/​src/core/gpu/mesh.h#L48|Mesh]].
  
  
Line 138: Line 155:
  
 <note tip> <note tip>
-Pentru a înțelege mai bine API-ul OpenGL vă rocomandăm să citiți documentația indicată pentru fiecare comandă prezentată. Atunci când se prezintă o nouă comandă, dacă apăsați click pe numele acesteia veți fi redirecționați către pagina de manual a comenzii respective.\\ ​+Pentru a înțelege mai bine API-ul OpenGL vă recomandăm să citiți documentația indicată pentru fiecare comandă prezentată. Atunci când se prezintă o nouă comandă, dacă apăsați click pe numele acesteia veți fi redirecționați către pagina de manual a comenzii respective.\\ ​
 De asemenea, documentația oficială și completă a API-ului OpenGL poate fi gasită pe pagina **[[https://​www.opengl.org/​sdk/​docs/​man/​|OpenGL 4 Reference Pages]]** ​ De asemenea, documentația oficială și completă a API-ului OpenGL poate fi gasită pe pagina **[[https://​www.opengl.org/​sdk/​docs/​man/​|OpenGL 4 Reference Pages]]** ​
 </​note>​ </​note>​
Line 185: Line 202:
  
 În cadrul laboratorului vom învăța să folosim **VAO, VBO, IBO** și astfel să generăm și încărcăm geometrie simplă.\\ ​ În cadrul laboratorului vom învăța să folosim **VAO, VBO, IBO** și astfel să generăm și încărcăm geometrie simplă.\\ ​
-Laboratorul pune la dispoziție structura [[https://​github.com/​UPB-Graphics/​Framework-EGC/​blob/​master/​Source/Core/GPU/Mesh.h#L14|VertexFormat]] ce va fi utilizată ca bază pentru a crea geometria.+Laboratorul pune la dispoziție structura [[https://​github.com/​UPB-Graphics/​gfx-framework/​blob/​master/​src/core/gpu/vertex_format.h|VertexFormat]] ce va fi utilizată ca bază pentru a crea geometria.
  
 <code cpp> <code cpp>
Line 209: Line 226:
  
 // Initializes the mesh object using a VAO GPU buffer that contains the specified number of indices // Initializes the mesh object using a VAO GPU buffer that contains the specified number of indices
-bool InitFromBuffer(unsigned int VAO, unsigned ​short nrIndices);+bool InitFromBuffer(unsigned int VAO, unsigned ​int nrIndices);
  
 // Initializes the mesh object and upload data to GPU using the provided data buffers // Initializes the mesh object and upload data to GPU using the provided data buffers
-bool InitFromData(std::​vector<​VertexFormat>​ vertices, +bool InitFromData(const std::​vector<​VertexFormat>​vertices, 
- std::​vector<​unsigned ​short>& indices);+ const std::​vector<​unsigned ​int>& indices);
  
 // Initializes the mesh object and upload data to GPU using the provided data buffers // Initializes the mesh object and upload data to GPU using the provided data buffers
-bool InitFromData(std::​vector<​glm::​vec3>&​ positions,​ +bool InitFromData(const std::​vector<​glm::​vec3>&​ positions,​ 
- std::​vector<​glm::​vec3>&​ normals, + const std::​vector<​glm::​vec3>&​ normals, 
- std::​vector<​unsigned ​short>& indices);+ const std::​vector<​unsigned ​int>& indices);
 </​code>​ </​code>​
 <note tip> <note tip>
Line 233: Line 250:
  
 <note important>​ <note important>​
-Toate cerințele ce țin de încărcare de geometrie trebuie rezolvate prin intermediul funcției ''​Laborator2::​CreateMesh''​ dar puteți folosi metodele ''​Mesh::​InitFromData()''​ pentru a verifica validitatea geometriei.+Toate cerințele ce țin de încărcare de geometrie trebuie rezolvate prin intermediul funcției ''​Lab2::​CreateMesh''​ dar puteți folosi metodele ''​Mesh::​InitFromData()''​ pentru a verifica validitatea geometriei.
 </​note>​ </​note>​
  
-  - Descărcați [[https://​github.com/​UPB-Graphics/​Framework-EGC/​archive/​master.zip|framework-ul de laborator]]+  - Descărcați [[https://​github.com/​UPB-Graphics/​gfx-framework/​archive/​master.zip|framework-ul de laborator]]
   - Completați geometria și topologia unui cub: vectorii de vertecși și indecși din inițializare. ''​VertexFormat''​ este o structură pentru vertex cu 2 parametrii (poziție, culoare).   - Completați geometria și topologia unui cub: vectorii de vertecși și indecși din inițializare. ''​VertexFormat''​ este o structură pentru vertex cu 2 parametrii (poziție, culoare).
-  - Completați funcția ''​Laborator2::​CreateMesh''​ astfel încât să încărcați geometria pe GPU+  - Completați funcția ''​Lab2::​CreateMesh''​ astfel încât să încărcați geometria pe GPU
     * creați un VAO     * creați un VAO
     * creați un VBO și adăugați date în el     * creați un VBO și adăugați date în el
     * creați un IBO și adăugați date în el     * creați un IBO și adăugați date în el
-    * afișați noul obiect (RenderMesh[cube3]) astfel încât să nu se suprapună cu un alt obiect+    * afișați noul obiect (RenderMesh[cube_B]) astfel încât să nu se suprapună cu un alt obiect
   - Creați o nouă formă geometrică simplă, de exemplu un tetraedru și desenați-l în scenă   - Creați o nouă formă geometrică simplă, de exemplu un tetraedru și desenați-l în scenă
   - Atunci când se apasă tasta **F2** faceți toggle între modul de culling **GL_BACK** și **GL_FRONT**   - Atunci când se apasă tasta **F2** faceți toggle între modul de culling **GL_BACK** și **GL_FRONT**
egc/laboratoare/02.1634552270.txt.gz · Last modified: 2021/10/18 13:17 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