Я не знаю, чи є "правильний" спосіб це зробити, але це, мабуть, лише естетично приємна лінійна трансформація, застосована з випаданням, обчисленою від відстані до точки.
Отже, для будь-якого елемента, з яким ви працюєте, ви:
- знайти відстань до центру основи (d)
- обчислити 1 - d / максимальну відстань ефекту, який ти хотів би (i для інтенсивності)
- затискати, що на [0-1]
- перетворити елемент на lerp (тотожність, перетворення, i)
Iirc, Geometry wars застосували це як спотворюючу основу до деяких елементів, тоді як інші елементи, як частинки, просто впливали на "силу", не перекручуючись. Ви можете застосувати спотворення у вершинній шейдері, припускаючи, що у вас достатньо вершин для плавного вибору ефекту. Крім того, ви можете спочатку викласти все, що потребує впливу, на буфер поза екраном, а потім вивести результати на добре тессельований квадратик, до якого ви застосуєте спотворення, перш ніж додавати всі не спотворені елементи зверху.
Що стосується трансформації, масштабування надасть вам смоктання на вигляд. Якщо я добре пам’ятаю, також відбувалося певне скручування, яке було б просто невеликим обертанням.
Ви можете отримати фантазії та вигадливіші з розрахунками коефіцієнта інтенсивності, щоб отримати ефективніші ефекти. Ви можете, наприклад, обчислити кут (a), що елемент відносно центру, і коефіцієнт, який є дюйма. Візьміть cos (a) і ви можете зробити радіальні хвилі в результаті. Що ви хочете зробити, це налаштувати себе з необхідним кодом лісу, а потім вирушайте в місто, експериментуючи з різними комбінаціями факторів.