Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // uniform float gradients[16];
- // uniform vec2 gradients[16];
- uniform vec2 gradients[16]; // "corner" vectors
- uniform int grad_size; // size of a cell
- uniform int grad_quant; // how many gradients
- #define mat(i,j) gradients[i+grad_quant*j]
- float get_value_at(ivec2 pixel_coord) {
- // which gradient is this pixel in?
- ivec2 grad_coord = ivec2(int(pixel_coord.x/float(grad_size)), int(pixel_coord.y/float(grad_size)));
- // what pixel is this gradient pixel?
- ivec2 grad_coord_scaled = grad_coord * grad_size;
- // vector with 0..1 values
- vec2 nm = vec2(pixel_coord - grad_coord_scaled) / float(grad_size);
- vec2 A = mat(grad_coord.x, grad_coord.y);
- vec2 B = mat(grad_coord.x + 1, grad_coord.y);
- vec2 C = mat(grad_coord.x, grad_coord.y + 1);
- vec2 D = mat(grad_coord.x + 1, grad_coord.y + 1);
- float dot_a = dot(A, nm);
- float dot_b = dot(B, vec2(nm.x - 1.0f, nm.y));
- float dot_c = dot(C, vec2(nm.x, nm.y - 1.0f));
- float dot_d = dot(D, vec2(nm.x - 1.0f, nm.y - 1.0f));
- // return
- // mix(
- // A,B,
- // vec2(float((pixel_coord.x/10)%4)/4.f, float((pixel_coord.y/10)%4)/4.f)
- // ).x+0.3;
- return abs(
- mix(
- mix(dot_a, dot_b, nm.x),
- mix(dot_c, dot_d, nm.x),
- nm.y
- ));
- ;
- }
- void main()
- {
- // float val = get_value_at(gl_FragCoord.xy);
- // float val = get_value_at(glTexCoord.xy);
- gl_FragColor = get_value_at(ivec2(glTexCoord.x, glTexCoord.y));
- // gl_FragColor = vec4(0,1,0,1);
- gl_FragColor = vec4(0,val,0,1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement