Я экспериментирую с 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-координаты.
Спасибо!