Differences

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

Link to this comparison view

spg:laboratoare:01 [2023/10/03 14:03]
anca.morar [Input si Output]
spg:laboratoare:01 [2023/10/03 15:02] (current)
anca.morar [Cerințe laborator]
Line 17: Line 17:
 __Pentru implementarea de programe SHADER în OpenGL se folosește limbajul dedicat GLSL (GL Shading Language).__ __Pentru implementarea de programe SHADER în OpenGL se folosește limbajul dedicat GLSL (GL Shading Language).__
  
-Codul pentru încărcarea unui shader este oferit în funcția init() din cadrul laboratorului.+Codul pentru încărcarea unui shader este oferit în funcția ​''​init()'' ​din cadrul laboratorului.
  
 Un __**GEOMETRY SHADER**__ e un program care se execută pentru __**FIECARE**__ primitivă trimisă către banda grafică. Pe scurt, acest shader primește ca intrare primitive grafice (puncte, linii și triunghiuri) și oferă ca ieșire tot primitive grafice. În banda grafică, așa cum se poate vedea în imaginea de mai sus, se află între **Vertex Shader** și **Fragment Shader**. Mai exact, ieșirea de la vertex shader devine intrare pentru geometry shader și ieșirea de la acesta devine intrare pentru fragment shader (după alți câțiva pași ficși). Un __**GEOMETRY SHADER**__ e un program care se execută pentru __**FIECARE**__ primitivă trimisă către banda grafică. Pe scurt, acest shader primește ca intrare primitive grafice (puncte, linii și triunghiuri) și oferă ca ieșire tot primitive grafice. În banda grafică, așa cum se poate vedea în imaginea de mai sus, se află între **Vertex Shader** și **Fragment Shader**. Mai exact, ieșirea de la vertex shader devine intrare pentru geometry shader și ieșirea de la acesta devine intrare pentru fragment shader (după alți câțiva pași ficși).
Line 52: Line 52:
 //intrarea este un triunghi //intrarea este un triunghi
  
-layout(triangle_strip,​ max_vertices = 5) out; +layout(triangle_strip,​ max_vertices = 4) out; 
-//ieșirea este un triangle strip cu maxim 5 varfuri (2 triunghiuri)+//ieșirea este un triangle strip. Se vor genera ​maxim 4 vârfuri
  
 layout(location = 0) in vec2 vert_texcoord[3];​ layout(location = 0) in vec2 vert_texcoord[3];​
Line 75: Line 75:
  EmitVertex();​  EmitVertex();​
  
- EndPrimitive();+        vec3 offset = vec3(1,​0,​0);​ 
 +        gl_Position = gl_in[0].gl_Position + offset; ​  
 +        //al patrulea vârf se obține prin translația primului vârf cu un offset  
 + geom_texcoord = vert_texcoord[0];​ 
 + EmitVertex();
  
 + EndPrimitive();​
 +        //directiva aceasta încheie primitiva ​
 +        //în acest exemplu, primitiva este un triangle_strip cu 4 vârfuri
 +        //acesta este echivalent cu două triunghiuri cu indicii 0-1-2 și 1-2-3
 } }
 </​code>​ </​code>​
Line 97: Line 105:
 </​code>​ </​code>​
  
-  * De asemenea există și intrare implicită la geometry shader, numită ''​gl_in'',​ din care ne interesează ''​gl_Position'':​ <code glsl>+  * De asemeneaexistă și intrare implicită la geometry shader, numită ''​gl_in'',​ din care ne interesează ''​gl_Position'':​ <code glsl>
 in gl_PerVertex in gl_PerVertex
 { {
Line 113: Line 121:
 Pentru fiecare vârf emis din geometry shader se pot asocia coordonate textură, normală, culoare, asociate vârfului (setate înainte de fiecare apel ''​EmitVertex()''​). Pentru fiecare vârf emis din geometry shader se pot asocia coordonate textură, normală, culoare, asociate vârfului (setate înainte de fiecare apel ''​EmitVertex()''​).
 Acestea trebuie declarate ca variabile de ieșire. Acestea trebuie declarate ca variabile de ieșire.
-După cum se poate observa, valoarea lui ''​geom_texcoord''​ este actualizată înainte de fiecare apel ''​EmitVertex()'':​ +După cum se poate observa, valoarea lui ''​geom_texcoord''​ este actualizată înainte de fiecare apel ''​EmitVertex()'':<​code glsl>
- +
-<code glsl>+
 gl_Position = gl_in[0].gl_Position;​ gl_Position = gl_in[0].gl_Position;​
 geom_texcoord = vert_texcoord[0];​ geom_texcoord = vert_texcoord[0];​
Line 121: Line 127:
 </​code>​ </​code>​
  
 +Într-un geometry shader se pot emite mai multe primitive (comanda ''​EmitVertex()''​ se poate da o dată sau de mai multe ori).
 ==== Cerințe laborator ==== ==== Cerințe laborator ====
  
Line 135: Line 142:
  
  
-{{:​spg:​laboratoare:​bambusi_pe_coloane.jpg?​500| }} +{{:​spg:​laboratoare:​bambusi_pe_coloane.jpg?​650| }} 
-{{:​spg:​laboratoare:​shrink.png?500| }}+ 
 +{{:​spg:​laboratoare:​lab1_scalare.png?​650| }} 
 + 
 +{{:​spg:​laboratoare:​efect_scalare.png?650| }}
  
spg/laboratoare/01.1696331027.txt.gz · Last modified: 2023/10/03 14:03 by anca.morar
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