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


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ę
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.