Tak, masz rację, ten efekt wody 2D można symulować za pomocą funkcji sinusoidy matematycznej :
wave = sin(phase + t * frequency) * amplitude
phase
jest stałą, wkładaj co chcesz.
- ustaw
t
poziomą pozycję przetwarzanego piksela / wierzchołka:t = x;
zmieniają amplitude
się w czasie (co powoduje, że fale poruszają się w górę i w dół):
amplitude = sin(t * wave_speed) * wave_height
połącz kilka fal, aby uzyskać bardziej relastyczny efekt:
wave_final = wave0 + wave1 + ...
.
Dla każdej fali zmień trochę parametry (np .: faza, częstotliwość, ...).
Oto szybki przykład, który zrobiłem, używając tylko dwóch fal:
http://glslsandbox.com/e#4988.0 (wymagana najnowsza przeglądarka i włączona obsługa WebGL)
UWAGA: jest to moduł cieniujący, ale robienie tego przy użyciu prymitywów 2D jest tym samym podejściem.
EDYCJA: nie określasz żadnego szkieletu ani systemu renderowania 2D, ale oto jak można to renderować za pomocą pasków wielokątów / trójkątów: