Sí, tiene razón, este efecto de agua 2D puede simularse utilizando la función seno matemática :
wave = sin(phase + t * frequency) * amplitude
phase
es una constante, pon lo que quieras.
- establecer
t
en posición horizontal de píxel / vértice que está procesando:t = x;
cambiar amplitude
con el tiempo (eso hará que las olas se muevan hacia arriba y hacia abajo):
amplitude = sin(t * wave_speed) * wave_height
Combina varias ondas para obtener un efecto más relajado:
wave_final = wave0 + wave1 + ...
.
Para cada onda, cambie algunos parámetros un poco (por ejemplo: fase, frecuencia, ...).
Aquí hay un ejemplo rápido que hice, usando solo dos ondas:
http://glslsandbox.com/e#4988.0 (requiere navegador reciente y WebGL habilitado)
NOTA: este es un sombreador, pero hacer esto usando primitivas 2D es el mismo enfoque.
EDITAR: no especifica ningún marco o sistema de representación 2D, pero así es como se podría representar utilizando polígonos / tiras triangulares: