Почему этот шейдер OpenGL использует координаты текстуры за пределами 1.0?

Я пытаюсь познакомиться с шейдерами в 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? И почему, несмотря на это, размытие по-прежнему прекрасно работает?

5
задан Brad Larson 18 July 2011 в 19:31
поделиться