2011-08-23 31 views
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有三個碼塊(評論最後兩個)。第一個按預期工作,而其他評論者不工作。

問題是我認爲它們是等價的。他們爲什麼不是?

+0

您也必須給出dot()的定義。 – phkahler

+0

查看你的答案評論。但是,這裏是:* float dot(genType x,genType y)* – Luca

+0

GLSL中的矩陣是**列 - 主要**,btw。 –

回答

0

我簡直不敢相信!

Paul-Jan edit已解決我的問題!

只需GLSL編譯器不會在矩陣初始化時發出錯誤! 我不敢相信!


我很好奇,您的意見在這裏,我想開在這個問題上的另一個問題。