Фрагмент шейдера - Воспроизведение синего слайдера уровня канала - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь создать фрагментный шейдер, который будет выполнять ту же работу, что и ползунок вывода уровней Photoshop.Я хотел бы сделать это на определенном канале (в данном случае синий).

У меня есть код, как показано ниже:

varying highp vec2 textureCoordinate;

uniform sampler2D inputImageTexture;

#define GammaCorrection(color, gamma)       pow(color, vec3(1.0/gamma))

#define LevelsControlOutputRange(color, minOutput, maxOutput) mix(vec3(minOutput/255), vec3(maxOutput/255), color)


void main()
{

     lowp vec4 texel = texture2D(inputImageTexture, textureCoordinate);

     lowp vec3 outputColor;
     outputColor.rgb = texel.rgb;

     lowp vec3 pass3 = LevelsControlOutputRange(outputColor,200,255); 

     lowp vec4 pass4;
     pass4.r = outputColor.r;
     pass4.g = outputColor.g;
     pass4.b = pass3.b;

 gl_FragColor = pass4;


}

Это не влияет на результирующее изображение, поэтому я думаю,что мне, возможно, придется сделать больше со строкой:

pass4.b = pass3.b;

Может ли кто-нибудь помочь направить меня в правильном направлении?

Спасибо

1 Ответ

0 голосов
/ 22 февраля 2012

mix принимает значение от 0 до 1 в качестве параметра микширования.Ваши 255 будут ограничены до 1, и поэтому вы всегда получите максимальное выходное значение.Аналогичным образом значения текстуры находятся в диапазоне 0… 1, вам не нужно делить на 255, чтобы попасть в какой-то диапазон!Кстати: просто делить на 255 не правильно - подробности здесь http://kaba.hilvi.org/programming/range/index.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...