I want to make a wave warp effect like this:

But I can only create the normal sine wave.
Here is my fragment shader:
precision mediump float;
varying vec2 v_texCoord;
uniform sampler2D s_baseMap;
vec2 SineWave( vec2 p ){
float pi = 3.14159;
float A = 0.15;
float w = 10.0 * pi;
float t = 30.0*pi/180.0;
float y = sin( w*p.x + t) * A;
return vec2(p.x, p.y+y);
}
void main(){
vec2 p = v_texCoord;
vec2 uv = SineWave( p );
vec4 tcolor = texture2D(s_baseMap, uv);
gl_FragColor = tcolor;
}
and result is:

So the question is how to warp the wave on a specific direction?
thanks.
update: I distort x axis when compute y, but the result seems not right.
float x = p.x + p.y*tan( -0.5);
float y = sin( w*x + t) * A;
return vec2(p.x, p.y+y);

