v4k-git-backup/demos/art/shadertoys/Mss3zH.fs

56 lines
1.7 KiB
Forth
Raw Normal View History

2023-11-02 09:54:49 +00:00
// Created by inigo quilez - iq/2013
// https://www.youtube.com/c/InigoQuilez
// https://iquilezles.org/
// Shows how to use the mouse input (only left button supported):
//
// mouse.xy = mouse position during last button down
// abs(mouse.zw) = mouse position during last button click
// sign(mouze.z) = button is down
// sign(mouze.w) = button is clicked
// See also:
//
// Input - Keyboard : https://www.shadertoy.com/view/lsXGzf
// Input - Microphone : https://www.shadertoy.com/view/llSGDh
// Input - Mouse : https://www.shadertoy.com/view/Mss3zH
// Input - Sound : https://www.shadertoy.com/view/Xds3Rr
// Input - SoundCloud : https://www.shadertoy.com/view/MsdGzn
// Input - Time : https://www.shadertoy.com/view/lsXGz8
// Input - TimeDelta : https://www.shadertoy.com/view/lsKGWV
// Inout - 3D Texture : https://www.shadertoy.com/view/4llcR4
float distanceToSegment( vec2 a, vec2 b, vec2 p )
{
vec2 pa = p - a, ba = b - a;
float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );
return length( pa - ba*h );
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 p = fragCoord / iResolution.x;
vec2 cen = 0.5*iResolution.xy/iResolution.x;
vec4 m = iMouse / iResolution.x;
vec3 col = vec3(0.0);
if( m.z>0.0 ) // button is down
{
float d = distanceToSegment( m.xy, abs(m.zw), p );
col = mix( col, vec3(1.0,1.0,0.0), 1.0-smoothstep(.004,0.008, d) );
}
if( m.w>0.0 ) // button click
{
col = mix( col, vec3(1.0,1.0,1.0), 1.0-smoothstep(0.1,0.105, length(p-cen)) );
}
col = mix( col, vec3(1.0,0.0,0.0), 1.0-smoothstep(0.03,0.035, length(p- m.xy )) );
col = mix( col, vec3(0.0,0.0,1.0), 1.0-smoothstep(0.03,0.035, length(p-abs(m.zw))) );
fragColor = vec4( col, 1.0 );
}