Я экспериментирую с 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);
}
Пока все хорошо.Тем не менее, я бы хотел сделать фильтрацию на основе пикселей, например, Median.Итак, я хотел бы работать в пиксельных координатах, а не в нормализованных (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-координаты.
Спасибо!