Differences

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

Link to this comparison view

egc:laboratoare:fr:06 [2019/11/14 07:21]
alexandru.gradinaru created
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 131: Line 132:
 </​code>​ </​code>​
  
-Functiile **glUniform** sunt de forma **glUniform[Matrix?​]NT[v?​]** (regex) ​unde+Les fonctions ​glUniform ​ont la forme **glUniform[Matrix?​]NT[v?​]** (regex) ​
-  * Matrix - in cazul in care e prezent identifica o matrice +  * Matrix - si présent identifie un tableau 
-  * N - reprezinta numarul ​de variabile ​de tipul **T** ce vor fi trimise+  * N - représente le nombre ​de variables ​de type à envoyer
-    * **1, 2, 3, 4** in cazul tipurilor simple +    * **1, 2, 3, 4** pour les types simples 
-    * pentru matrici mai exista si **2x3, 2x4, 3x2, 3x4, 4x2, 4x3** +    * pour les matrices il y a aussi **2x3, 2x4, 3x2, 3x4, 4x2, 4x3** 
-  * T - reprezinta tipul variabilelor trimise+  * T - représente le type de variables envoyées
     * **ui** - unsigned int     * **ui** - unsigned int
     * **i** - int     * **i** - int
     * **f** - float     * **f** - float
-  * v - datele sunt specificate printr-un vectorse da adresa ​de memorie a primei valori din vector+  * v - les données sont spécifiées par un vecteurl'​adresse mémoire ​de la première valeur du vecteur est donnée
  
  
-===== Comunicarea intre shadere-le ​OpenGL ======+===== Communication entre shaders ​OpenGL ======
  
-In general ​pipeline-ul programat este alcatuit din mai multe programe ​shader. ​In cadrul cursului de EGC vom utiliza doar __Vertex Shader__ si __Fragment Shader__. OpenGL ​ofera posibilitatea ​de a comunica date intre programele ​shader ​consecutive prin intermendiul atributelor **in** si **out**+n général, le pipeline ​planifié se compose de plusieurs programmes de shader. ​Dans le cours EGC, nous utiliserons uniquement Vertex Shader et Fragment Shader ​. OpenGL ​offre la possibilité de communiquer des données entre des programmes ​de shader ​consécutifs via les attributs ​in et out.
  
 <note important>​ <note important>​
-In metoda specifica ​OpenGL 3.3 numele ​de atribut **attribute_name** trebuie sa fie acelasi atat in __Vertex Shader__ cat si in __Fragment Shader__ pentru a se stie legatura intre input/output.+OpenGL 3.3 attribut nom de méthode spécifique ATTRIBUTE_NAME doit être identique à la fois Vertex Shader et le fragment shader pour connaître la connexion entre l' entrée ​sortie.
 </​note>​ </​note>​
  
Line 164: Line 165:
  
 <note important>​ <note important>​
-In caz ca avem support pentru ​GLSL 410 (OpenGL 4.1) se poate specifica si locatia attributului astfelcaz in care doar locatiile vor fi folosite pentru a lega iesirea unui __Vertex Shader__ ​de intrarea ​la __Fragment Shader__ si nu numele atributului\\  +Si GLSL 410 (OpenGL 4.1) est pris en chargel'​emplacement ​de l'​attribut peut également être spécifié. Dans ce cas, seuls les emplacements seront utilisés pour lier la sortie d'un Vertex Shader à l'​entrée Fragment Shader et non le nom de l'​attribut
-Mai multe detalii se pot obtine ​de la: [[https://​www.opengl.org/​wiki/​Layout_Qualifier_(GLSL)#​Program_separation_linkage | Program separation linkage ]]+Plus de détails peuvent être obtenus auprès ​de:​[[https://​www.opengl.org/​wiki/​Layout_Qualifier_(GLSL)#​Program_separation_linkage | Program separation linkage ]]
 </​note>​ </​note>​
  
Line 184: Line 185:
  
  
-==== Cerinte laborator ​====+==== Exercices ​====
  
 <note tip> <note tip>
  
-tasta **F5** reincarca shaderele in timpul rularii aplicatiei. Nu este nevoie sa opriti aplicatia intrucat shaderele sunt __compilate si rulate ​de catre placa video__ si nu au legatura cu codul sursa C++ propriu zis.+Touche ​F5 - recharge le shader lors de l'​exécution de l'​application. Il n'est pas nécessaire d'​arrêter l'​application car les shader sont compilés et exécutés par la carte vidéo et ne sont pas liés au code source ​C ++ lui-même.
  
 </​note>​ </​note>​
  
-  - Descarcati ​[[https://​github.com/​UPB-Graphics/​Framework-EGC/​archive/​master.zip|framework-ul de laborator]] +  - 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 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 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 ModelView, Projection <code glsl>+    - La position dans le clip reçu du sommet reçu est calculée à l'aide des matrices ModèleVue, 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 ​(triunghilinie) <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 ​(triangleligne)<code glsl>
  in vec3 frag_color;  in vec3 frag_color;
 </​code>​ </​code>​
-    * Se calculeaza valoarea fragmentului ​(pixeluluide output ​<code glsl>+    * La valeur du fragment de sortie ​(pixelest 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 culoaredupa 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 couleuraprès une fonction ​de temps (trigonométrique, ​etc.)
  
 <​hidden>​ <​hidden>​
egc/laboratoare/fr/06.1573708863.txt.gz · Last modified: 2019/11/14 07:21 by alexandru.gradinaru
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