среда, 24 января 2018 г.

Хроматическая аберрация


Структура пиксельного шейдера на примере еффекта "Хроматическая аберрация"

Подготовку проекта в AGK смотрите ЗДЕСЬ.

Рассмотрим пиксельный шейдер "Хроматическая аберрация" для App Game Kit на языке GLSL:

uniform sampler2D texture0;

varying mediump vec2 uvVarying;

uniform vec2 agk_resolution;
uniform float agk_sintime;
uniform float agk_time;

void main()
{
vec2 scale = 1.0/agk_resolution;
vec4 color = vec4(texture2D(texture0, uvVarying ).rgba);
vec2 UV_MOD=vec2(3.0*agk_sintime*agk_sintime , 0.0 );
color.r = texture2D(texture0, uvVarying+UV_MOD*scale).r;

gl_FragColor = color;
}

Подготовка проекта в AGK для использования постобработки

четверг, 26 ноября 2015 г.

Движение объекта по кругу (2D)

Рассмотрим простой алгоритм движения спрайта по кругу с заданной скоростью и заданным радиусом движения.
Мы будем использовать две тригонометрические функции: синус и косинус. Синус будет задавать изменение координаты X, а косинус - Y.
Для примера я взял картинки с игры The Binding of Isaac. В игре мухи "защитные" спутники летают вокруг Айзека по кругу. Сделаем тоже самое и мы!
В примере будут 3 основных объекта: главный персонаж и две мухи, которые будут летать вокруг него.

среда, 18 ноября 2015 г.

Расстояние до цели (2D)

Иногда в своих играх нужно определить расстояние до цели (дальность выстрела, аура, урон и тд). Тогда нужно использовать простейшую формулу с геометрии - теорему Пифагора (сума квадратов катетов прямоугольного треугольника равна квадрату гипотенузы).

Нам нужно найти гипотенузу треугольника ( с ). Для этого найдем сначала длину каждого катета. Катет "b" является осью X, поэтому нужно отнять х-координату первой  точки от х-координаты второй точки  х=х2-х1  (или наоборот x=х1-х2, на результат это не повлияет). Катет "а" это ось Y: y=y2-y1. После этого подносим к квадрату x и y, суммируем значения и находим корень квадратный. Всё просто :)
Как это будет выглядеть в AGK (напишем функцию):

Function  Distance(x1,y1,x2,y2)
x=x2-x1
y=y2-y1
result#=Sqrt(x*x+y*y)
endfunction result#