Нем верно в своем ответе, что координата текстуры должна быть в [0,1]. Но имейте в виду, что значения gl_FragCoord
находятся в [0, N] x [0, M] (при условии, что ваш видовой экран также равен NxM). Таким образом, вы правильно добавили смещение 1 к координате фрагмента, но затем эту сумму нужно разделить на размер экрана (который, вероятно, совпадает с размером текстуры):
precision mediump float;
uniform sampler2D Sampler;
uniform vec2 invScreenSize;
void main()
{
vec2 T = gl_FragCoord.xy;
//Find neighboring velocities:
vec2 N = texture2D(Sampler,vec2(T.x,T.y+1.0)*invScreenSize).xy;
vec2 S = texture2D(Sampler,vec2(T.x,T.y-1.0)*invScreenSize).xy;
vec2 E = texture2D(Sampler,vec2(T.x+1.0,T.y)*invScreenSize).xy;
vec2 W = texture2D(Sampler,vec2(T.x-1.0,T.y)*invScreenSize).xy;
}
, где invScreenSize
- обратный размер экрана (1/N, 1/M)
, чтобы предотвратить деление в шейдере.