Vâng, bạn đã đúng, hiệu ứng nước 2D này có thể được mô phỏng bằng hàm sin toán học :
wave = sin(phase + t * frequency) * amplitude
phase
là một hằng số, đặt bất cứ điều gì bạn muốn.
- đặt thành
t
vị trí ngang của pixel / đỉnh bạn đang xử lý:t = x;
thay đổi amplitude
theo thời gian (điều đó sẽ làm cho sóng di chuyển lên xuống):
amplitude = sin(t * wave_speed) * wave_height
kết hợp nhiều sóng để có được hiệu ứng đáng tin cậy hơn:
wave_final = wave0 + wave1 + ...
.
Đối với mỗi sóng, thay đổi một số tham số một chút (ví dụ: pha, tần số, ...).
Đây là một ví dụ nhanh tôi đã thực hiện, chỉ sử dụng hai sóng:
http://glslsandbox.com/e#4988.0 (yêu cầu trình duyệt và kích hoạt WebGL gần đây)
LƯU Ý: đây là một shader, nhưng thực hiện điều này bằng cách sử dụng các nguyên hàm 2D là cách tiếp cận tương tự.
EDIT: bạn không chỉ định bất kỳ hệ thống kết xuất khung hoặc 2d nào, nhưng đây là cách nó có thể được hiển thị bằng cách sử dụng các đa giác / dải tam giác: