Nie wiem, czy jest to „właściwy” sposób, ale prawdopodobnie jest to po prostu przyjemna estetycznie transformacja liniowa zastosowana ze spadkiem obliczonym z odległości do punktu.
Tak więc dla każdego elementu, z którym pracujesz:
- znajdź odległość do środka osnowy (d)
- obliczyć 1 - d / maksymalną odległość efektu, który chciałbyś (i dla intensywności)
- przymocuj to do [0-1]
- przekształć element przez lerp (tożsamość, transformacja, i)
Iirc, wojny geometrii zastosowały to jako zniekształcającą osnowę do niektórych elementów, podczas gdy inne elementy, takie jak cząstki, zostały po prostu dotknięte „siłą”, bez zniekształceń. Możesz zastosować zniekształcenie w module cieniującym wierzchołki, zakładając, że masz wystarczającą liczbę wierzchołków, aby płynnie próbkować efekt. Alternatywnie możesz najpierw wyrenderować wszystko, co musi wpłynąć na bufor ekranowy, a następnie renderować wyniki na ładnie mozaikowanym kwadracie, do którego zastosujesz zniekształcenie, przed dodaniem wszystkich niezniekształconych elementów na wierzchu.
Jeśli chodzi o transformację, skalowanie da ci ssący wygląd. O ile dobrze pamiętam, działo się też trochę skręcanie, które byłoby tylko małą rotacją.
Możesz uzyskać bardziej wyrafinowane i bardziej wyrafinowane obliczenia współczynnika intensywności, aby uzyskać bardziej zwięzłe efekty. Można na przykład obliczyć kąt (a), jaki element ma względem środka, i uwzględnić w nim. Weź cos (a), aby uzyskać efekt fal promieniowych. To, co chcesz zrobić, to skonfigurować niezbędny kod rusztowania, a następnie udać się do miasta, eksperymentując z różnymi kombinacjami czynników.