1
我有以下GLSL代碼:Matrix組件和積
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有三個碼塊(評論最後兩個)。第一個按預期工作,而其他評論者不工作。
問題是我認爲它們是等價的。他們爲什麼不是?
您也必須給出dot()的定義。 – phkahler
查看你的答案評論。但是,這裏是:* float dot(genType x,genType y)* – Luca
GLSL中的矩陣是**列 - 主要**,btw。 –