Так, ви праві, цей двовимірний ефект води можна змоделювати за допомогою функції математичної синусоїди :
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-рендерінгу, але ось, як це могло бути відображено за допомогою полігонів / трикутників: