Saya tidak tahu apakah ada cara yang "benar" untuk melakukannya, tetapi kemungkinan itu hanya transformasi linear yang menyenangkan secara estetika yang diterapkan dengan falloff yang dihitung dari jarak ke titik.
Jadi untuk elemen apa pun yang bekerja dengan Anda, Anda akan:
- temukan jarak ke pusat warp (d)
- menghitung 1 - d / jarak maksimum efek yang Anda inginkan (i untuk intensitas)
- jepit itu ke [0-1]
- mengubah elemen dengan lerp (identitas, transform, i)
Namun, perang Geometri menerapkannya sebagai belokan yang menyimpang ke beberapa elemen, sedangkan elemen lain seperti partikel hanya dipengaruhi oleh "kekuatan", tanpa terdistorsi. Anda bisa menerapkan distorsi dalam vertex shader, dengan anggapan Anda memiliki cukup simpul untuk sampel efek dengan lancar. Sebagai alternatif, Anda dapat merender semua yang perlu mempengaruhi buffer offscreen terlebih dahulu, dan kemudian memberikan hasilnya ke quad tessellated baik yang Anda gunakan distorsi, sebelum menambahkan semua elemen yang tidak terdistorsi di atas.
Sedangkan untuk transformasi, penskalaan akan memberikan Anda tampilan yang menarik. Jika saya ingat dengan benar, ada beberapa putaran yang terjadi, yang hanya akan sedikit rotasi.
Anda bisa menjadi semakin keren dengan perhitungan faktor intensitas untuk mendapatkan efek yang terlihat lebih aneh. Anda bisa, misalnya, menghitung sudut (a) bahwa suatu elemen relatif terhadap pusat, dan faktor yang masuk. Ambil cos (a) dan Anda dapat membuat gelombang radial dalam efeknya. Yang ingin Anda lakukan adalah mengatur diri Anda dengan kode perancah yang diperlukan dan kemudian pergi ke kota bereksperimen dengan berbagai kombinasi faktor.