2013-01-18 19 views
0

當我有一個具有透明度(和alpha通道)的紋理時,透明區域看起來像是帶有值(0,0,0,1)的vec4s。放棄通過alpha值爲0的任何顏色(顯然0仍然存在)很容易。但是這也導致0和1之間的透明度問題。一切都顯示出完全不透明,我無法想象是什麼導致了它的存在。片段着色器將所有的alpha值解釋爲1

這是我的着色器的樣子。我一直在玩它,但目前這是我正在處理的一個。只需將alpha值通過0.5f就可以看到會發生什麼。還是完全不透明:

#version 150 core 

uniform sampler2D sampler; 

in vec4 pass_Color; 
in vec2 pass_TextureCoord; 
in float pass_alpha; 

out vec4 frag_Color; 

void main(void) { 
    frag_Color = pass_Color; 

    vec3 color = texture2D(sampler, pass_TextureCoord); 

    frag_Color = vec4(color, pass_alpha); 

} 

回答

1

我不知道LWJGL,但看到它是基於OpenGL的,你可能必須啓用Blending。假設在頂點着色器中正確計算pass_alpha。

此外,main中的第一行沒有做任何事情,因爲frag_color被覆蓋在最後一行。

+0

感謝您的回覆。我認爲你是對的,但你能向我解釋如何做到這一點?如果你只是放縱我,我一直在尋找整個早晨。 glEnablei()函數如何工作?我無法在任何地方找到它的例子。除GL_BLEND之外,我在哪裏調用它並使用哪些參數作爲參數? – SirYancy

+0

如果您繪製到多個緩衝區(其中第二個參數是緩衝區的名稱),則只需要glEnablei。爲了啓用混合,只需使用glEnable(GL_BLEND)。 – fscan

+0

你華麗的混蛋。謝謝。 – SirYancy

相關問題