This shows you the differences between two versions of the page.
|
egc:laboratoare:02 [2021/10/18 13:29] robert.caragicu [Laborator 2] corectat parametrii pentru functia InitFromData |
egc:laboratoare:02 [2025/11/26 20:37] (current) andrei.voicu2409 [Cerințe laborator] |
||
|---|---|---|---|
| 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 ===== | ||
| 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 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/gfx-framework/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** | ||
| Line 260: | Line 277: | ||
| - **[Bonus]** Creați un obiect mai complex, format din cel puțin 4 fețe (tetraedru) astfel încât fiecare față să fie desenată cu câte o singură culoare. | - **[Bonus]** Creați un obiect mai complex, format din cel puțin 4 fețe (tetraedru) astfel încât fiecare față să fie desenată cu câte o singură culoare. | ||
| * explicați studenților de ce e nevoie să declare fiecare vertex de 3 ori cu culori diferite (în cazul tetraedrului) | * explicați studenților de ce e nevoie să declare fiecare vertex de 3 ori cu culori diferite (în cazul tetraedrului) | ||
| + | - **[Bonus]** Realizarea unui torus generat procedural, utilizând parametrizarea în două unghiuri și discretizarea acestora pentru a construi geometria (vertecși și indici). Un torus poate fi descris prin ecuația parametrică p(u,v)=((R+rcosv)cosu, (R+rcosv)sinu, rsinv) | ||
| </hidden> | </hidden> | ||