circles and rectangles
a few circles and rectangles
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;
// Normalized pixel coordinates (from 0 to 1)
// same as gl_FragCoord / u_resolution.xy
varying vec2 v_texcoord;
// draw circle as pos_uv with radius r, blur radius r_blur, fg color fg and bg color bg
vec3 circle(vec2 pos_uv, float r, float r_blur, vec3 fg, vec3 bg) {
vec2 diff = v_texcoord - pos_uv;
vec2 diff_s = vec2(diff.x * u_resolution.x / u_resolution.y, diff.y);
float len = length(diff_s);
float t = smoothstep(r - r_blur, r + r_blur, len);
return mix(fg, bg, t);
}
vec3 rectangle(vec2 pos_uv, vec2 size, vec2 blur, vec3 fg, vec3 bg) {
float ar = u_resolution.x / u_resolution.y;
vec3 c = mix(fg, bg, smoothstep(pos_uv.x*ar + size.x/2.0 - blur.x, pos_uv.x*ar + size.x/2.0 + blur.x, v_texcoord.x*ar));
c = mix(c, bg, smoothstep(pos_uv.y + size.y/2.0 - blur.y, pos_uv.y + size.y/2.0 + blur.y, v_texcoord.y));
c = mix(bg, c, smoothstep(pos_uv.x*ar - size.x/2.0 - blur.x, pos_uv.x*ar - size.x/2.0 + blur.x, v_texcoord.x*ar));
c = mix(bg, c, smoothstep(pos_uv.y - size.y/2.0 - blur.y, pos_uv.y - size.y/2.0 + blur.y, v_texcoord.y));
return c;
}
void main(void) {
vec4 color = vec4(vec3(0.0), 1.0);
vec2 uv = v_texcoord;
float ar = u_resolution.x / u_resolution.y;
vec3 fg = vec3(uv.y, uv.x, 1);
vec3 bg = vec3(uv.x, uv.y, .5);
color.rgb = circle(vec2(.1, .2), .1, .03, fg, bg);
color.rgb = circle(vec2(.9, .2), .1, .01, fg, color.rgb);
color.rgb = circle(vec2(.5), .3, .1, fg, color.rgb);
color.rgb = rectangle(vec2(.2, .8), vec2(.3, .2), vec2(.02), fg, color.rgb);
gl_FragColor = color;
}