Кто-нибудь может объяснить фрагмент кода шейдера для меня? - PullRequest
0 голосов
/ 10 марта 2020

Я установил входной цвет (0,001,0.0,0.0), min_lum - 0.0, min_max - 1.0. Таким образом, Sum_old будет 0,001, а x_old будет 1,0, y_old будет 0,0, z_old также будет 0,0. Как можно рассчитать красный по этому коду?

uniform sampler2D tex;
uniform float lum_min, lum_max;

void main()
{
    vec3 XYZ = vec3(0.0001,0.0,0.0);//texture2D(tex, gl_TexCoord[0].xy).rgb;

    float X_old = XYZ.r;
    float Y_old = XYZ.g;
    float Z_old = XYZ.b;
    float Sum_old = X_old + Y_old + Z_old;

    float x_old = X_old / Sum_old;
    float y_old = Y_old / Sum_old;
    float z_old = Z_old / Sum_old;

    // Avoid zero luminance. Not allowed in XYZ!
    float Y_new = (clamp(Y_old, lum_min + 0.00001, lum_max) - lum_min) / (lum_max - lum_min);

    float X_new = (Y_new / y_old) * x_old;
    float Z_new = (Y_new / y_old) * z_old;

    gl_FragColor = vec4(X_new, Y_new, Z_new, 0.0);
}
...