Ответ 1
Я не могу найти ссылок, но я могу дать общее представление о том, как работают эффекты искажения.
Ключом к искажению является функция, которая принимает две координаты (x, y) в искаженном изображении и преобразует их в координаты (u, v) в исходное изображение. Это указывает на обратную функцию искажения, поскольку он возвращает искаженное изображение к исходному изображению
Чтобы сгенерировать искаженное изображение, одна петля над x и y, вычисляет точку (u, v) из (x, y) с помощью функции обратного искажения и устанавливает цветовые компоненты в (x, y) как такие же, как в (u, v) в исходном изображении. Один из них использует интерполяцию (например, http://en.wikipedia.org/wiki/Bilinear_interpolation), чтобы определить цвет в (u, v), так как (u, v) обычно не лежит точно в центре пикселя, а скорее в некоторой частичной точке между пикселями.
Вихрь представляет собой, по существу, поворот, где угол поворота зависит от расстояния от центра изображения. Примером может служить:
a = amount of rotation
b = size of effect
angle = a*exp(-(x*x+y*y)/(b*b))
u = cos(angle)*x + sin(angle)*y
v = -sin(angle)*x + cos(angle)*y
Здесь я для простоты предполагаю, что центр вихря находится в точке (0,0). Вихрь можно поместить где угодно, вычитая координаты положения вихря от x и y перед функцией искажения и добавив их к u и v после него.
Существуют различные вихревые эффекты: некоторые (как и выше) вихряют только локализованную область и имеют количество вихря, уменьшающееся к краю изображения. Другие увеличивают завихрение к краю изображения. Это можно сделать, играя с помощью линии angle =, например.
angle = a*(x*x+y*y)