Sim, você está certo, este efeito de água 2D pode ser simulado usando a função math sine :
wave = sin(phase + t * frequency) * amplitude
phase
é uma constante, coloque o que quiser.
- defina
t
para a posição horizontal do pixel / vértice que você está processando:t = x;
mudar ao amplitude
longo do tempo (que fará as ondas subirem e descerem):
amplitude = sin(t * wave_speed) * wave_height
combine várias ondas para obter um efeito mais relástico:
wave_final = wave0 + wave1 + ...
.
Para cada onda, altere alguns parâmetros um pouco (por exemplo: fase, frequência, ...).
Aqui está um exemplo rápido que fiz, usando apenas duas ondas:
http://glslsandbox.com/e#4988.0 (requer navegador recente e WebGL ativado)
NOTA: este é um sombreador, mas fazer isso usando primitivas 2D é a mesma abordagem.
EDIT: você não especifica nenhum framework ou sistema de renderização 2D, mas aqui está como ele pode ser renderizado usando polígonos / tiras de triângulo: