Ya, Anda benar, efek air 2D ini dapat disimulasikan menggunakan fungsi matematika sinus :
wave = sin(phase + t * frequency) * amplitude
phase
adalah konstanta, letakkan apa pun yang Anda inginkan.
- atur
t
ke posisi horizontal pixel / vertex yang Anda proses:t = x;
berubah amplitude
seiring waktu (yang akan membuat ombak bergerak naik dan turun):
amplitude = sin(t * wave_speed) * wave_height
menggabungkan beberapa gelombang untuk mendapatkan efek yang lebih relastik:
wave_final = wave0 + wave1 + ...
.
Untuk setiap gelombang, ubah beberapa parameter sedikit (misalnya: fase, frekuensi, ...).
Ini adalah contoh cepat yang saya buat, hanya menggunakan dua gelombang:
http://glslsandbox.com/e#4988.0 (memerlukan browser terbaru dan WebGL diaktifkan)
CATATAN: ini adalah shader, tetapi melakukan ini menggunakan primitif 2D adalah pendekatan yang sama.
EDIT: Anda tidak menentukan kerangka kerja atau sistem rendering 2d, tapi di sini adalah bagaimana hal itu dapat dirender menggunakan strip poligon / segitiga: