Я пытаюсь познакомиться с шейдерами в opengl. Вот пример кода, который я нашел (работа с openframeworks). Код просто размывает изображение в два прохода, сначала по горизонтали, а затем по вертикали. Вот код из горизонтального шейдера. Мое единственное замешательство - координаты текстуры. Они превышают 1.
void main( void )
{
vec2 st = gl_TexCoord[0].st;
//horizontal blur
//from http://www.gamerendering.com/2008/10/11/gaussian-blur-filter-shader/
vec4 color;
color += 1.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -4.0, 0));
color += 2.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -3.0, 0));
color += 3.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -2.0, 0));
color += 4.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -1.0, 0));
color += 5.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt , 0));
color += 4.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * 1.0, 0));
color += 3.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * 2.0, 0));
color += 2.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * 3.0, 0));
color += 1.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * 4.0, 0));
color /= 5.0;
gl_FragColor = color;
}
Я не могу сделать из этого кода головы или хвосты. Координаты текстуры должны быть между 0 и 1, и я немного читал о том, что происходит, когда они больше 1, но это не то поведение, которое я вижу (или я не вижу связи). blurAmnt варьируется от 0,0 до 6,4, поэтому значение s может быть от 0 до 25,6. Изображение просто становится более или менее размытым в зависимости от значения, я не вижу повторяющихся узоров.
Мой вопрос сводится к следующему: что именно происходит, когда аргумент координаты текстуры в вызове texture2DRect превышает 1? И почему поведение размытия по-прежнему прекрасно работает, несмотря на это?