Traté de implementar lo que teodron sugirió:
void main()
{
vec2 uv = gl_FragCoord.xy / resolution.xy;
float sepoffset = 0.005*cos(iGlobalTime*3.0);
if (uv.y > 0.3 + sepoffset)// is air - no reflection or effect
{
gl_FragColor = texture2D(texture, vec2(uv.x, -uv.y));
}
else
{
// Compute the mirror effect.
float xoffset = 0.005*cos(iGlobalTime*3.0+200.0*uv.y);
//float yoffset = 0.05*(1.0+cos(iGlobalTime*3.0+50.0*uv.y));
float yoffset = ((0.3 - uv.y)/0.3) * 0.05*(1.0+cos(iGlobalTime*3.0+50.0*uv.y));
vec4 color = texture2D(texture, vec2(uv.x+xoffset , -1.0*(0.6 - uv.y+ yoffset)));
//
//vec4 finalColor = vec4(mix(color.rgb, overlayColor, 0.25), 1.0);
gl_FragColor = color;
}
}
Se ve bastante cerca (es difícil saberlo sin la imagen base) pero puede ajustar los parámetros.
Puede verlo en acción allí: https://www.shadertoy.com/view/Xll3R7
Algunas observaciones:
- Tuve que invertir la coordenada y ya que estaba poniendo la imagen al revés, pero puede depender de lo que pase a la resolución.xy; si el resultado se invierte para usted, simplemente desinvierta uv.y
- Cambié tus declaraciones de uniformes para que funcione con sombreado. Puedes ignorar esos cambios.
- Sin embargo, deberá agregar un uniforme que proporcione el tiempo y usarlo en lugar de iGlobalTime (que es el tiempo en segundos)
- Agregué un efecto de marea, ya que parece que hay uno en su ejemplo, pero es difícil saberlo (ver la variable sepoffset). Puedes eliminarlo si no te gusta
- Eliminé el color superpuesto ya que no se veía bien, y su ejemplo no tenía uno
- Para ajustar el efecto a tu gusto:
- cambie el factor de iGlobalTime para acelerar / ralentizar el efecto (puede cambiar cada uno de ellos por separado si lo desea, digamos acelerar el movimiento x y ralentizar el movimiento y)
- cambiar el factor cos () para amplificar / atenuar el efecto
EDITAR: cambié el desplazamiento para incluir la modificación de @cepro
time
valor, puede desplazar eluv.xy
con un(sin(time),cos(time))
vector de desplazamiento. Por supuesto, debe averiguar las amplitudes de las compensaciones de seno y coseno. Comenzaría con solo compensar eluv.y
primero y ver cómo puedo ajustar aún más el efecto.