Ponownie utwórz efekt fali bocznej 2D z gry Worms

Odpowiedzi:

14

Tak, masz rację, ten efekt wody 2D można symulować za pomocą funkcji sinusoidy matematycznej :

wave = sin(phase + t * frequency) * amplitude

wprowadź opis zdjęcia tutaj

  • phase jest stałą, wkładaj co chcesz.
  • ustaw tpoziomą pozycję przetwarzanego piksela / wierzchołka:t = x;
  • zmieniają amplitudesię 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:

wprowadź opis zdjęcia tutaj

tigrou
źródło
Wow, to niesamowita odpowiedź, dzięki za bardzo wyczerpującą odpowiedź. Tak, do renderowania używam interfejsu API Canvas HTML5. Jeszcze raz dziękuję za to, bardzo pomocny !!
Ciarán
Prawo, chociaż fale w Worms są wyraźnie nie zaledwie sines ale bardziej skomplikowane; bardzo możliwe, że superpozycje sinusów.
leftaroundabout
1
@leftaroundabout - Technicznie rzecz biorąc , każda funkcja fali jest tak naprawdę superpozycją nieskończonej liczby sinusów. Praktycznie jest to nadal prawdą, ale bardziej przybliżone przybliżenia mogą ułatwić ci życie.
Fałszywe imię