Как изменить оттенок цвета в противоположную сторону - PullRequest
0 голосов
/ 01 августа 2020

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

// convert to  YCC color model color 
vec2 RGBToCC(vec4 rgba) {
    float Y = 0.299 * rgba.r + 0.587 * rgba.g + 0.114 * rgba.b;
    return vec2((rgba.b - Y) * 0.565, (rgba.r - Y) * 0.713);
}       

vec2 RGBAToCC (float r, float g, float b) {
    
    float y = 0.299 * r + 0.587 * g + 0.114 * b;    
    return vec2((b - y) * 0.565, (r - y) * 0.713);
}


void main() {
        texture2D( tex , uvCoord );
        vec4 src1Color = texture2D(u_tex,  texCoord);
            keyCC = RGBAToCC( colorToPick.r , colorToPick.g , colorToPick.b  );
            vec2 CC = RGBToCC(src1Color);
            float myCol = sqrt(pow(keyCC.x - CC.x, 2.0) + pow(keyCC.y - CC.y, 2.0));
            myCol = smoothstep(range.x, range.y, mask);
         if (myCol == 0.0) 
        {
                         // i want to shift the hue of the color to opposite direction
                        // if it is green than shift it toward magenta


        }
}

Я могу выбрать цвет, но не могу способен понять, как изменить оттенок цвета в противоположном направлении.

1 Ответ

1 голос
/ 01 августа 2020

В цветовом пространстве YCbCr два компонента C… представляют собой значения цветового баланса со значениями в диапазоне [-1,1]. Инверсия оттенка так же просто, как перевернуть знак вектора компонента цвета, то есть с помощью переменных в вашем коде CC = -CC;

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