Если вы хотите преобразовать gl_FragCoord
, чтобы нормализовать пространство устройства, я рекомендую создать форму, которая содержит размер области просмотра:
uniform vec2 u_resolution; // with and height of the viewport
gl_FragCoord.xy
содержит координаты «окна» фрагмента, gl_FragCoord.z
содержит глубину в диапазоне глубины, которая равна [0, 1], если вы не изменили ее на glDepthRange
.
Нормализованное пространство устройства - это куб с левой, нижней, передней координатами (-1, -1, -1) и правой, верхней, задней координатой (1, 1, 1):
Итак, преобразование:
vec3 ndc = -1.0 + 2.0 * gl_FragCoord.xyz/vec3(u_resolution.xy, 1.0);
Или следующее, если вы хотите преобразовать только компоненты x
и y
:
vec2 ndc_xy = -1.0 + 2.0 * gl_FragCoord.xy/u_resolution.xy;