ripple/addPacketDisplacement.frag
2017-11-28 12:35:49 -05:00

27 lines
828 B
GLSL

#version 410
#define PI 3.14159265359
out vec4 Color;
in Attribs {
vec4 Pos;
vec4 Att1;
vec4 Att2;
} In;
// rasterize wave packet quad
// wave packet data:
// position vector: x,y = [-1..1], position in envelope
// attribute vector: x=amplitude, y=wavelength, z=time phase, w=envelope size
// FALSE /!\ attribute2 vector: (x,y)=position of bending point, z=central distance to ref point, 0
void main(void)
{
/* If centerDiff == 0, the wave is straight */
float centerDiff = length(In.Pos.zw - vec2(0, In.Att2.x)) - abs(In.Pos.w - In.Att2.x);
float phase = -In.Att1.z + (In.Pos.w + centerDiff) * 2 * PI / In.Att1.y;
/* ROLL CREDITS ! */
vec3 ripple = (1.0 + cos(In.Pos.x * PI)) * (1.0 + cos(In.Pos.y * PI)) * In.Att1.x *
vec3(0, cos(phase), 0);
Color = vec4(ripple, 1);
}