Disculpe si hago que esto suene un poco simplista, no estoy seguro de cuánto sabe acerca de la programación gfx o incluso qué técnicas está utilizando (lo haría con HLSL).
La forma en que abordaría este problema es generar una textura que contiene desplazamientos de coordenadas x/y en los canales de r/g. A continuación, el color de salida de un píxel sería:
Textura inputImage
Textura distortionMap
de color (x, y) = inputImage (x + distortionMap (x, y) .R, y + distortionMap (x, y) .G)
(a decir verdad, esto no es del todo bien, usando los colores como compensaciones directamente significa que sólo se puede representar vectores positivos, es lo suficientemente simple para restar 0,5 para que pueda representar vectores negativos)
Ahora el único El problema que queda es cómo generar este mapa de distorsión, que es una pregunta completamente diferente (cualquier imagen generaría una distorsión de algún tipo, obviamente, trabajar en un efecto licuado apropiado es bastante complejo y lo dejaré en algunos eone más calificado).