#version 330 core in vec2 wspTekstur; uniform sampler2D ProbnikTekstury; out vec3 kolor_out; const vec2 rozmiarOkna = vec2(800,600); //http://www.geeks3d.com/20110428/shader-library-swirl-post-processing-filter-in-glsl/ //parametry wiru uniform float promienWiru = 200.0; uniform float katWiru = 0.8; uniform vec2 srodekWiru = rozmiarOkna / 2; void main() { //vec4 teksel = texture(ProbnikTekstury, wspTekstur); //kolor_out = teksel.rgb; vec2 _wspTekstur2 = wspTekstur * rozmiarOkna; //wspolrzedne w pikselach _wspTekstur2 -= srodekWiru; float odleglosc = length(_wspTekstur2); if (odleglosc < promienWiru) { float procent = (promienWiru - odleglosc) / promienWiru; float kat = procent * procent * katWiru * 8.0; float s = sin(kat); float c = cos(kat); //spirala _wspTekstur2 = vec2(dot(_wspTekstur2, vec2(c, -s)), dot(_wspTekstur2, vec2(s, c))); } _wspTekstur2 += srodekWiru; kolor_out = texture(ProbnikTekstury, _wspTekstur2 / rozmiarOkna).rgb; }