Да, вы правы, этот 2D эффект воды можно смоделировать с помощью математической функции синуса :
wave = sin(phase + t * frequency) * amplitude
phase
константа, ставь все что хочешь.
- установить
t
горизонтальное положение обрабатываемого пикселя / вершины:t = x;
изменяться amplitude
со временем (это заставит волны двигаться вверх и вниз):
amplitude = sin(t * wave_speed) * wave_height
объедините несколько волн, чтобы получить более эффектный эффект:
wave_final = wave0 + wave1 + ...
,
Для каждой волны немного измените некоторые параметры (например: фаза, частота, ...).
Вот быстрый пример, который я сделал, используя только две волны:
http://glslsandbox.com/e#4988.0 (требуется недавний браузер и включенный WebGL)
ПРИМЕЧАНИЕ: это шейдер, но для этого используются 2D примитивы.
РЕДАКТИРОВАТЬ: вы не указываете какие-либо рамки или 2d системы рендеринга, но вот как это может быть визуализировано с использованием полигонов / треугольных полос: