This shows you the differences between two versions of the page.
egc:laboratoare:06 [2017/11/02 00:19] florin_eugen.iancu [Cerinte laborator] |
egc:laboratoare:06 [2021/11/19 13:08] (current) victor.asavei [Cerinte laborator] |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Laboratorul 06 ===== | ===== Laboratorul 06 ===== | ||
+ | **Video Laborator 6**: https://youtu.be/f7q2TGCRly0 \\ | ||
+ | **Autor**: [[maria_anca.balutoiu@upb.ro | Anca Băluțoiu]] | ||
==== Banda Grafica ==== | ==== Banda Grafica ==== | ||
Line 82: | Line 84: | ||
A doua comanda descrie structura datelor in cadrul VBO-ului astfel: | A doua comanda descrie structura datelor in cadrul VBO-ului astfel: | ||
* pe pipe-ul **2** se trimit la shader 3 float-uri (argument 3) pe care nu le normalizam (argument 4) | * pe pipe-ul **2** se trimit la shader 3 float-uri (argument 3) pe care nu le normalizam (argument 4) | ||
- | * argumentul 5 numit si **stride**, identifica pasul de citire (in bytes) in cadrul VBO-ului pentru a obtine urmatorul atribut; cu alte cuvinte, din cati in cati octeti avem o noua pereche de cate 3 float-uri | + | * argumentul 5 numit si **stride**, identifica pasul de citire (in bytes) in cadrul VBO-ului pentru a obtine urmatorul atribut; cu alte cuvinte, din cati in cati octeti sarim cand vrem sa gasim un nou grup de cate 3 float-uri care reprezinta acelasi lucru |
* argumentul 6 identifica offsetul inital din cadrul buffer-ul legat la GL_ARRAY_BUFFER (VBO); cu alte cuvinte, de unde plecam prima oara. | * argumentul 6 identifica offsetul inital din cadrul buffer-ul legat la GL_ARRAY_BUFFER (VBO); cu alte cuvinte, de unde plecam prima oara. | ||
Line 107: | Line 109: | ||
<code cpp> | <code cpp> | ||
- | int location = glGetUniformLocation(int shader_program, "uniform_variable_name_in_shader")** | + | int location = glGetUniformLocation(int shader_program, "uniform_variable_name_in_shader"); |
</code> | </code> | ||
* **shader_program** reprezinta ID-ul programului shader compilat pe placa video | * **shader_program** reprezinta ID-ul programului shader compilat pe placa video | ||
- | * in cadrul framework-ului de laborator ID-ul se poate obtine apeland functia ''shader->GetProgramID()'' sau direct accesand vriabila membru ''shader->program'' | + | * in cadrul framework-ului de laborator ID-ul se poate obtine apeland functia ''shader->GetProgramID()'' sau direct accesand variabila membru ''shader->program'' |
Line 194: | Line 196: | ||
</note> | </note> | ||
- | - Descarcati [[https://github.com/UPB-Graphics/Framework-EGC/archive/master.zip|framework-ul de laborator]] | + | - Descarcati [[https://github.com/UPB-Graphics/gfx-framework/archive/master.zip|framework-ul de laborator]] |
- Completati functia ''RenderSimpleMesh'' astfel inca sa trimiteti corect valorile uniform catre Shader | - Completati functia ''RenderSimpleMesh'' astfel inca sa trimiteti corect valorile uniform catre Shader | ||
* Se interogeaza locatia uniformelor "Model", "View" si "Projection" | * Se interogeaza locatia uniformelor "Model", "View" si "Projection" | ||
* Folosind ''glUniformMatrix4fv'' sa se trimita matricile corespunzatoare catre shader | * Folosind ''glUniformMatrix4fv'' sa se trimita matricile corespunzatoare catre shader | ||
- | * Daca ati completat corect functia, impreuna cu exercitiul **3** punctul **d**, ar trebui sa vedeti un cub pe centrul ecranului rottit 45 grade in jurul lui Y si colorat variat | + | * Daca ati completat corect functia, si ati completat gl_Position in vertex shader, ar trebui sa vedeti un cub pe centrul ecranului rottit 45 grade in jurul lui Y si colorat variat |
- Completati Vertex Shaderul | - Completati Vertex Shaderul | ||
- | - Se de clara atributele de intrare pentru ''Vertex Shader'' folosind layout location <code glsl> | + | - Se declara atributele de intrare pentru ''Vertex Shader'' folosind layout location <code glsl> |
layout(location = 0) in vec3 v_position; | layout(location = 0) in vec3 v_position; | ||
- | // same for the rest of the attributes | + | // same for the rest of the attributes ( check Lab6.cpp CreateMesh() ); |
</code> | </code> | ||
- Se declara atributele de iesire catre ''Fragment Shader'' <code glsl> | - Se declara atributele de iesire catre ''Fragment Shader'' <code glsl> | ||
Line 223: | Line 226: | ||
out_color = vec4(frag_color, 1); | out_color = vec4(frag_color, 1); | ||
</code> | </code> | ||
- | - Sa se primeasca toate atributele trimise de catre vertex shader conform locatiilor utilizate in functia ''Laborator6::CreateMesh'' | ||
- Sa se utilizeze normala vertexilor pe post de culoare de output in cadrul Fragment Shader-ului | - Sa se utilizeze normala vertexilor pe post de culoare de output in cadrul Fragment Shader-ului | ||
* Inspectati de asemenea structura ''VertexFormat'' pentru a intelege ceea ce se trimite pe fiecare pipe | * Inspectati de asemenea structura ''VertexFormat'' pentru a intelege ceea ce se trimite pe fiecare pipe | ||
- Sa se interschimbe **pipe-ul 1** cu **pipe-ul 3**. Trimiteti normala pe **pipe-ul 3** si culoarea vertexului pe **pipe-ul 1** | - Sa se interschimbe **pipe-ul 1** cu **pipe-ul 3**. Trimiteti normala pe **pipe-ul 3** si culoarea vertexului pe **pipe-ul 1** | ||
* Se inspecteaza rezultatul obtinut | * Se inspecteaza rezultatul obtinut | ||
+ | - Bonus: sa se trimita timpul aplicatiei (Engine::GetElapsedTime()), si sa se varieze pozitia si culoarea (unul sau mai multe canale de culoare) dupa o functie de timp (trigonometrica etc.) | ||
<hidden> | <hidden> | ||
+ | - Sa se primeasca toate atributele trimise de catre vertex shader conform locatiilor utilizate in functia ''Laborator6::CreateMesh'' | ||
**[Bonusuri posibile]** | **[Bonusuri posibile]** | ||
* displacement in vertex shader | * displacement in vertex shader |