2013-08-24 156 views
0

我使用這個片段着色器:的OpenGL - GLSL着色器,alpha混合

#version 150 core 

uniform sampler2D texture1; 

in vec4 pass_Color; 
in vec2 pass_TextureCoord; 

out vec4 out_Color; 

void main(void) { 
    out_Color = pass_Color; 
    // Override out_Color with our texture pixel 
    out_Color = texture(texture1, pass_TextureCoord) * pass_Color ; 
} 

我們pass_Color我舉一個RGBA值。我改變了alpha值。紋理是rgba,也是一個PNG文件。我使用混合模式GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA。

現在的問題是,我通過在阿爾法值不會影響任何東西..

,我希望它..

+0

究竟是什麼你想要它影響(它看起來像你期望融合發生在你的片段着色器通過設置out_Color兩次......)?順便說一下(這是用於混合的值,而不是pass_Color.a),它真的是您感興趣的紋理(texture1,pass_TextureCoord).a * pass_Color.a的值。 –

+0

你是什麼意思?在紋理()調用.a不編譯 – Gopgop

+0

我的意思是隻有alpha分量影響混合。並且您將紋理的alpha分量乘以pass_Color.a的alpha分量。這是兩者相乘的結果,它決定了你的片段如何混合。 –

回答

0

我落得這樣做:

vec4 tex = texture(texture1, pass_TextureCoord); 
out_Color = vec4(tex.r*(pass_Color[0]),tex.g*(pass_Color[1]),tex.b*(pass_Color[2]),tex.a*(pass_Color[3])) ; 

工作得很好!

+4

這沒有任何意義,您應該堅持使用相同的組件選擇語法來保持一致性。使用'tex [0] * pass_Color [0]'或'tex.r * pass_Color.r'這樣人們就可以理解你的代碼。此外,您可以只執行'tex.rgba * pass_Color.rgba'或'tex * pass_Color'並獲得相同的結果,而不會使您的代碼難以閱讀。 –

+1

如果這樣做,原來沒有,這聽起來像你的司機是*令人難以置信的*越野車。 –

+0

不,事實證明alpha值沒有正確傳遞。所以我認爲這是它的工作原理..但它實際上是其他的東西.. – Gopgop