This shows you the differences between two versions of the page.
egc:laboratoare:fr:06 [2019/11/14 07:23] alexandru.gradinaru |
egc:laboratoare:fr:06 [2019/11/14 07:33] (current) alexandru.gradinaru |
||
---|---|---|---|
Line 7: | Line 7: | ||
En utilisant OpenGL sont transmises au GPU : les coordonnées des pics, les matrices de transformation des pics (M: modélisation, V: visualisation, P: projection, MV: modélisation-visualisation, MVP: modélisation-visualisation-projection), la topologie des primitives, textures et données . | En utilisant OpenGL sont transmises au GPU : les coordonnées des pics, les matrices de transformation des pics (M: modélisation, V: visualisation, P: projection, MV: modélisation-visualisation, MVP: modélisation-visualisation-projection), la topologie des primitives, textures et données . | ||
- | {{ :egc:laboratoare:banda_grafica.png?nolink&500 |}} | + | <hidden>{{ :egc:laboratoare:banda_grafica.png?nolink&500 |}}</hidden> |
+ | {{ :egc:laboratoare:fr:annotation_2019-11-14_094838.png?nolink&500 |}} | ||
1. Dans l’étape programmable, VERTEX SHADER transforme les coordonnées d’un pic à l’aide de la matrice MVP, en passant de coordonnées d’objet à coordonnées de coupe (coordonnées angulaires du clip ). En outre, des calculs d'éclairage au niveau de pointe peuvent être effectués. Le programme VERTEX SHADER est exécuté en parallèle pour un très grand nombre de pics. | 1. Dans l’étape programmable, VERTEX SHADER transforme les coordonnées d’un pic à l’aide de la matrice MVP, en passant de coordonnées d’objet à coordonnées de coupe (coordonnées angulaires du clip ). En outre, des calculs d'éclairage au niveau de pointe peuvent être effectués. Le programme VERTEX SHADER est exécuté en parallèle pour un très grand nombre de pics. | ||
Line 193: | Line 194: | ||
- Télécharger [[https://github.com/UPB-Graphics/Framework-EGC/archive/master.zip|le framework de laboratoire]] | - Télécharger [[https://github.com/UPB-Graphics/Framework-EGC/archive/master.zip|le framework de laboratoire]] | ||
- | - Completati functia ''RenderSimpleMesh'' astfel inca sa trimiteti corect valorile uniform catre Shader | + | - Completez la fonction ''RenderSimpleMesh'' pour que les valeurs soient correctement envoyées à Shader |
- | * Se interogeaza locatia uniformelor "Model", "View" si "Projection" | + | * L'emplacement des uniformes "Modèle", "Vue" et "Projection" est interrogé |
- | * Folosind ''glUniformMatrix4fv'' sa se trimita matricile corespunzatoare catre shader | + | * Utilisation ''glUniformMatrix4fv'' des tableaux appropriés à envoyer au shader |
- | * 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 | + | * Si vous avez terminé la fonction correctement et que vous avez terminé gl_Position dans le vertex shader, un cube au centre de l'écran pivoté à 45 degrés autour de Y et de couleur différente |
- | - Completati Vertex Shaderul | + | - Completez le Vertex Shader |
- | - Se de clara atributele de intrare pentru ''Vertex Shader'' folosind layout location <code glsl> | + | - Il efface les attributs d'entrée pour Vertex Shader utiliser l'emplacement de la disposition <code glsl> |
layout(location = 0) in vec3 v_position; | layout(location = 0) in vec3 v_position; | ||
// same for the rest of the attributes ( check Lab6.cpp CreateMesh() ); | // same for the rest of the attributes ( check Lab6.cpp CreateMesh() ); | ||
</code> | </code> | ||
- | - Se declara atributele de iesire catre ''Fragment Shader'' <code glsl> | + | - Les attributs de sortie à Fragment Shader sont déclarés <code glsl> |
out vec3 frag_color; | out vec3 frag_color; | ||
// same for other attributes | // same for other attributes | ||
</code> | </code> | ||
- | - Se salveza valorile de iesire in ''main()'' <code glsl> | + | - Les valeurs de sortie sont enregistrées dans ''main()'' <code glsl> |
frag_color = vertex_color; | frag_color = vertex_color; | ||
// same for other attributes | // same for other attributes | ||
</code> | </code> | ||
- | - Se calculeaza pozitia in clip space a vertexului primit folosind matricile Model, View, Projection <code glsl> | + | - La position dans le clip reçu du sommet reçu est calculée à l'aide des matrices Modèle, Vue, Projection. <code glsl> |
gl_Position = Projection * View * Model * vec4(v_position, 1.0); | gl_Position = Projection * View * Model * vec4(v_position, 1.0); | ||
</code> | </code> | ||
- | - Completati Fragment Shaderul | + | - Copmletez le fragment Shaderul |
- | * Se primesc valorile atributelor trimise de la ''Vertex Shader'' | + | * Les valeurs des attributs envoyés de ''Vertex Shader'' |
- | * Valoarea de intrare ale fiecarui atribut e calculata prin interpolare liniara intre vertexii ce formeaza patch-ul definit la desenare (triunghi, linie) <code glsl> | + | * La valeur d'entrée de chaque attribut est calculée par interpolation linéaire entre les sommets formant le patch défini au dessin (triangle, ligne). <code glsl> |
in vec3 frag_color; | in vec3 frag_color; | ||
</code> | </code> | ||
- | * Se calculeaza valoarea fragmentului (pixelului) de output <code glsl> | + | * La valeur du fragment de sortie (pixel) est calculée <code glsl> |
out_color = vec4(frag_color, 1); | out_color = vec4(frag_color, 1); | ||
</code> | </code> | ||
- | - Sa se utilizeze normala vertexilor pe post de culoare de output in cadrul Fragment Shader-ului | + | - Pour utiliser le sommet normal en tant que couleur de sortie dans le Fragment Shader |
- | * Inspectati de asemenea structura ''VertexFormat'' pentru a intelege ceea ce se trimite pe fiecare pipe | + | * Inspectez également la structure VertexFormatpour comprendre ce qui est envoyé sur chaque pipe. |
- | - Sa se interschimbe **pipe-ul 1** cu **pipe-ul 3**. Trimiteti normala pe **pipe-ul 3** si culoarea vertexului pe **pipe-ul 1** | + | - Échangez le pipe 1 avec le pipe 3 . Envoi normal sur le pipe 3 et couleur de sommet sur le pipe 1 |
- | * Se inspecteaza rezultatul obtinut | + | * Le résultat obtenu est inspecté |
- | - 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.) | + | - Bonus: envoyez le temps d'application (Engine :: GetElapsedTime ()), et changez la position et la couleur (un ou plusieurs canaux de couleur) après une fonction de temps (trigonométrique, etc.) |
<hidden> | <hidden> |