This shows you the differences between two versions of the page.
spg:laboratoare:01 [2023/10/03 14:21] anca.morar [Geometry Shader] |
spg:laboratoare:01 [2023/10/03 15:02] (current) anca.morar [Cerințe laborator] |
||
---|---|---|---|
Line 53: | Line 53: | ||
layout(triangle_strip, max_vertices = 4) out; | layout(triangle_strip, max_vertices = 4) out; | ||
- | //ieșirea este un triangle strip cu maxim 4 vârfuri (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 80: | Line 80: | ||
geom_texcoord = vert_texcoord[0]; | geom_texcoord = vert_texcoord[0]; | ||
EmitVertex(); | EmitVertex(); | ||
- | |||
EndPrimitive(); | 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 104: | 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 asemenea, există și intrare implicită la geometry shader, numită ''gl_in'', din care ne interesează ''gl_Position'': <code glsl> |
in gl_PerVertex | in gl_PerVertex | ||
{ | { | ||
Line 120: | 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 128: | 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 142: | 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| }} | ||