diff --git a/fragment.glsl b/fragment.glsl index e8e273e..270e314 100644 --- a/fragment.glsl +++ b/fragment.glsl @@ -3,7 +3,7 @@ out vec4 FragColor; uniform vec2 WindowSize; uniform float time; -float rand(vec2 co){ +float rand(ivec2 co) { return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453); } @@ -13,7 +13,8 @@ float cell_size = 0.1; // whatever that corner contributes float c_dot(vec2 point, vec2 corner) { - float angle = rand(corner) * 2*PI; + ivec2 c = ivec2(round(corner * 10000)); + float angle = rand(c) * 2*PI; vec2 random_corner_vec = vec2(cos(angle), sin(angle)); vec2 offset = (point - corner) / cell_size; float dot_product = dot(random_corner_vec, offset); @@ -25,6 +26,7 @@ float lerp(float a, float b, float x) { return a + x*(b-a); } +// better than built in smoothstep. float fade(float t) { return ((6*t - 15)*t + 10)*t*t*t; } @@ -48,12 +50,12 @@ void main() { vec2 tile_uv = (uv - c_tl) / cell_size; // lerp index - //float u = fade(tile_uv.x); - //float v = fade(tile_uv.y); + float u = fade(tile_uv.x); + float v = fade(tile_uv.y); //float u = tile_uv.x; //float v = tile_uv.y; - float u = smoothstep(0, 1, tile_uv.x); - float v = smoothstep(0, 1, tile_uv.y); + //float u = smoothstep(0, 1, tile_uv.x); + //float v = smoothstep(0, 1, tile_uv.y); //float val = smoothstep(tile_uv.x, smoothstep(tile_uv.y, c_bl_dot, c_tl_dot), smoothstep(tile_uv.y, c_br_dot, c_tr_dot)); float val = lerp(lerp(c_tl_dot, c_bl_dot, v), lerp(c_tr_dot, c_br_dot, v), u); //float val = tile_uv.y;