Matrix components and dot product
我有以下GLSL代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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具有三个代码块(后两个注释)。 第一个按预期工作,而其他已注释的则不起作用。
问题是我认为它们是等效的。 他们为什么不呢?
我简直不敢相信!
Paul-Jan编辑解决了我的问题!
只是GLSL编译器不会在矩阵初始化时发出错误! 我简直不敢相信!
我很好奇您的评论,我想在这个问题上再提出一个问题。