GLSL: Проблемы с gl_FragCoord

Я экспериментирую с GLSL для OpenGL ES 2.0. У меня есть четырехугольник и текстура, которую я визуализирую. Я могу успешно сделать это так:

//VERTEX SHADER
attribute highp vec4 vertex;
attribute mediump vec2 coord0;

uniform mediump mat4 worldViewProjection;

varying mediump vec2 tc0;

void main()
{
    // Transforming The Vertex
    gl_Position = worldViewProjection * vertex;

    // Passing The Texture Coordinate Of Texture Unit 0 To The Fragment Shader
    tc0 = vec2(coord0);
}

//FRAGMENT SHADER
varying mediump vec2 tc0;

uniform sampler2D my_color_texture;

void main()
{
    gl_FragColor = texture2D(my_color_texture, tc0);
}

Пока все хорошо. Однако я бы хотел применить фильтрацию на основе пикселей, например, Медиана. Итак, я хотел бы работать в пиксельных координатах, а не в нормализованных ( tc0 ), а затем преобразовать результат обратно в нормализованные координаты. Поэтому я хотел бы использовать gl_FragCoord вместо атрибута uv ( tc0 ). Но я не знаю, как вернуться к нормализованным координатам, потому что я не знаю диапазона gl_FragCoords. Есть идеи, как я могу это получить? Я дошел до этого, используя фиксированное значение для «нормализации», хотя оно не работает идеально, так как вызывает растяжение и мозаику (но, по крайней мере, что-то показывает):

//FRAGMENT SHADER
varying mediump vec2 tc0;

uniform sampler2D my_color_texture;

void main()
{
    gl_FragColor = texture2D(my_color_texture, vec2(gl_FragCoord) / vec2(256, 256));
}

Итак, простой вопрос: что я должен использовать вместо vec2 (256, 256) , чтобы я мог получить такой же результат, как если бы я использовал uv-координаты.

Спасибо!

9
задан genpfault 28 February 2011 в 17:15
поделиться