Advertisement
Guest User

Funny Shader

a guest
Dec 13th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #version 330 core
  2.  
  3. layout (points) in;
  4. layout (triangle_strip, max_vertices = 6) out;
  5.  
  6. uniform float rotation;
  7.  
  8. const float PI = 3.14159265359;
  9. const float scale = 0.5f;
  10.  
  11. void emitVertex(vec2 vert){
  12.     gl_Position = vec4(vert, 0, 1f);
  13.     EmitVertex();
  14. }
  15.  
  16. void createArrow(vec2 mid, int reflect, float rotation, vec2 translation, float scale){
  17.     mat2 m;
  18.    
  19.     if(reflect == 1){
  20.         m = mat2(-1, 0, 0, 1);
  21.     }
  22.     else{
  23.         m = mat2(1, 0, 0, 1);
  24.     }
  25.    
  26.     m = m * mat2(cos(rotation), sin(rotation), -sin(rotation), cos(rotation));
  27.     translation = translation * mat2(cos(rotation), sin(rotation), -sin(rotation), cos(rotation));
  28.    
  29.     emitVertex(translation + mid * m * scale);
  30.     emitVertex(translation + (mid + vec2(0.1f, -0.1f)) * m * scale);
  31.     emitVertex(translation + (mid + vec2(0f, 0.4f)) * m * scale);
  32. }
  33.  
  34. void createArrow(vec2 mid, float rotation, vec2 translation, float scale) {
  35.     createArrow(mid, 0, rotation, translation, scale);
  36.     createArrow(mid, 1, rotation, translation, scale);
  37. }
  38.  
  39. void main(){
  40.     vec2 mid = gl_in[0].gl_Position.xy;
  41.    
  42.     createArrow(mid + vec2(0f, 1f), rotation, vec2(0f, 0f), scale);
  43.    
  44.     EndPrimitive();
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement