
Код AS3:
function(x:Number, y:Number, strength:Number):Point {
return new Point(Math.sin(x * strength, y)); // Вертикальная волна с амплитудой длиною в текстуру.
}
По твоей формуле написал шейдер

Код AS3:
name = "screen";
vertexCode += "mov op, va0\n";
vertexCode += "mov v0, va1\n"; // uv
// distortion
vertexCode += "mov v1, vc0\n"; // stageWidth, stageHeight
fragmentCode = "mov ft1, v0\n"; // uv
fragmentCode += "mul ft2.x, ft1.x, v1.x\n"; // u * stageWidth
fragmentCode += "sin ft2.x, ft2.x\n"; // sin(u * stageWidth)
fragmentCode += "add ft1.x, ft1.x, ft2.x\n"; // u = sin(u * stageWidth)
fragmentCode += "tex ft0, ft1, fs0 <2d,nearest,clamp>\n";
fragmentCode += "mov oc, ft0\n";
Результат