From 01a8e0a656deabe44b5103cfc0322f4132b536d8 Mon Sep 17 00:00:00 2001 From: hellerve Date: Tue, 6 Jun 2017 12:01:53 -0400 Subject: [PATCH] weird: added hud --- weird/hud.glsl | 105 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 weird/hud.glsl diff --git a/weird/hud.glsl b/weird/hud.glsl new file mode 100644 index 0000000..1b167c8 --- /dev/null +++ b/weird/hud.glsl @@ -0,0 +1,105 @@ +#ifdef GL_ES +precision mediump float; +#endif + +#define PI 3.14159265359 +#define blue1 vec3(0.74,0.95,1.00) +#define blue2 vec3(0.87,0.98,1.00) +#define blue3 vec3(0.35,0.76,0.83) +#define blue4 vec3(0.953,0.969,0.89) +#define red vec3(1.00,0.38,0.227) + +uniform vec2 u_resolution; +uniform float u_time; + +mat2 rotate2d(float a) { + float c = cos(a); + return mat2(c, -sin(a), sin(a), c); +} + +vec2 get_center() { + return(u_resolution/2.)/min(u_resolution.x, u_resolution.y); +} + +vec2 get_st() { + return gl_FragCoord.xy/min(u_resolution.x, u_resolution.y); +} + +float dist(vec2 center) { + vec2 st = get_st(); + return distance(st, center); +} + +vec3 circle(vec2 center, float width, float rad, vec3 color) { + float e = 0.003; + float d = dist(center); + vec3 res = color; + res *= smoothstep(rad-width/2.-e, rad-width/2., d); + res *= 1.-smoothstep(rad+width/2., rad+width/2.+e, d); + return res; +} + +vec3 circle_with_trace(vec2 center, float width, float rad, vec3 color) { + float e = 0.003; + float d = dist(center); + float trace = 0.08; + vec3 res = color; + res *= smoothstep(rad-width/2.-e, rad-width/2., d); + res *= 1.-smoothstep(rad+width/2., rad+width/2.+e, d); + return (res+color*.5*(smoothstep(rad-trace, rad, d)-step(rad, d))); +} + +float circle_clip(float radius) { + float d = dist(get_center()); + return 1.-step(radius, d); +} + +vec3 floating_circle() { + vec2 pos = vec2(cos(u_time)*sin(u_time), sin(u_time))*.5+get_center(); + return circle(pos, 0.002, 0.002, vec3(1.)); +} + +vec3 line(float width, float angle, vec3 color, vec2 origin) { + float e = 0.003; + vec2 st = get_st(); + st -= origin; + st *= rotate2d(angle); + return color*((smoothstep(-e, 0., st.x)-smoothstep(0., e, st.x))); +} + +vec3 line_with_trace(float width, float angle, vec3 color, vec2 origin) { + float e = 0.003; + float trace = 0.9 * dist(get_center()); + vec2 origst = get_st(); + vec2 st = origst - origin; + st *= rotate2d(angle); + return (color*(smoothstep(-e, 0., st.x)-smoothstep(0., e, st.x))+color*.5*(step(0., st.x)-smoothstep(0., trace, st.x)))*step(0., -st.y); +} + +vec3 target() { + vec2 center = vec2(cos(u_time*0.5), sin(u_time*0.5))*0.2+get_center()+vec2(cos(u_time*0.3), sin(u_time*0.3))*0.25; + vec3 blink = circle(center, 0.01, 0.005, red) * step(0.5, abs(sin(u_time*8.))); + vec3 border = circle(center, 0.003, 0.02, red); + vec3 impulse = circle_with_trace(center, 0.003, mod(u_time, 1.)*0.12+0.03, red); + return blink+border+impulse; +} + +void main(){ + vec3 color = vec3(0.0); + vec2 st = get_st(); + float clip = circle_clip(.5); + + + color += circle(get_center(), 0.002, 0.02, blue1); + color += circle(get_center(), 0.002, 0.3, blue1); + color += circle(get_center(), 0.002, 0.4, blue1); + color += circle(get_center(), 0.005, 0.5, vec3(0.8)); + color += circle(get_center(), 0.007, 0.6, blue1); + color += clip*line(0.001, PI/4., vec3(.5), get_center()); + color += clip*line(0.001, -PI/4., vec3(.5), get_center()); + color += clip*line_with_trace(0.001, u_time, blue2, get_center()); + color += floating_circle(); + color += target(); + + gl_FragColor = vec4(color,1.0); +}