Вы можете сделать это с помощью одной строки в одном шейдере:
gl_FragColor = vec4(vec3(dot(1.0 - color.rgb, vec3(1.0/3.0))), color.a);
Объяснение:
обратный цвет:
vec3 inverseColor = 1.0 - color.rgb;
Для серой шкалы есть 2 возможности. Либо прямо вперед
float gray = (inverseColor.r + inverseColor.g + inverseColor.b) / 3.0;
Или с помощью dot
продукта:
float gray = dot(1.0 - inverseColor.rgb, vec3(1.0/3.0));
Наконец, создайте vec3
из gray
:
gl_FragColor = vec4(vec3(gray), color.a);