Матричные компоненты и точечный продукт - PullRequest
1 голос
/ 23 августа 2011

У меня есть следующий код GLSL:

uniform mat3x3 rgb2xyz = mat3x3(
    vec3(DEFAULT_RGB2XYZ_XR, DEFAULT_RGB2XYZ_XG, DEFAULT_RGB2XYZ_XB),
    vec3(DEFAULT_RGB2XYZ_YR, DEFAULT_RGB2XYZ_YG, DEFAULT_RGB2XYZ_YB),
    vec3(DEFAULT_RGB2XYZ_ZR, DEFAULT_RGB2XYZ_ZG, DEFAULT_RGB2XYZ_ZB)
    );

vec3 RGBtoXYZ(vec3 rgb)
{
            // Works
    float X = DEFAULT_RGB2XYZ_XR * rgb.r + DEFAULT_RGB2XYZ_XG * rgb.g + DEFAULT_RGB2XYZ_XB * rgb.b;
    float Y = DEFAULT_RGB2XYZ_YR * rgb.r + DEFAULT_RGB2XYZ_YG * rgb.g + DEFAULT_RGB2XYZ_YB * rgb.b;
    float Z = DEFAULT_RGB2XYZ_ZR * rgb.r + DEFAULT_RGB2XYZ_ZG * rgb.g + DEFAULT_RGB2XYZ_ZB * rgb.b;
    return vec3(X, Y, Z);

            // Don't work
    /*float X = rgb2xyz[0][0] * rgb.r + rgb2xyz[0][1] * rgb.g + rgb2xyz[0][2] * rgb.b;
    float Y = rgb2xyz[1][0] * rgb.r + rgb2xyz[1][1] * rgb.g + rgb2xyz[1][2] * rgb.b;
    float Z = rgb2xyz[2][0] * rgb.r + rgb2xyz[2][1] * rgb.g + rgb2xyz[2][2] * rgb.b;
    return vec3(X, Y, Z);*/

            // Don't work
    /*return vec3(
        dot(rgb2xyz[0], rgb),
        dot(rgb2xyz[1], rgb),
        dot(rgb2xyz[2], rgb)
    );*/
}

Подпрограмма RGBtoXYZ имеет три кодовых блока (два последних комментария).Первый работает как положено, в то время как другие не комментируются.

Проблема в том, что я думаю, что они эквивалентны.Почему их нет?

1 Ответ

0 голосов
/ 23 августа 2011

Я не могу в это поверить!

Пол-Ян edit решил мою проблему!

Просто компилятор GLSL не выдает ошибку при инициализации матрицы! Я не могу в это поверить!


Мне любопытны ваши комментарии, я подумываю открыть еще один вопрос по этому вопросу.

...