片段着色器将所有alpha值解释为1

时间:2013-01-18 03:22:23

标签: java lwjgl

当我有一个具有透明度的纹理(和一个alpha通道)时,透明区域似乎是以值(0,0,0,1)的vec4s形式出现的。很容易丢弃任何通过alpha值为0的颜色(显然0仍然存在......)。但是这也导致了0到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 个答案:

答案 0 :(得分:1)

我不知道lwjgl,但看到它基于opengl,你可能需要启用Blending。假设在顶点着色器中正确计算了pass_alpha。

此外,main中的第一行没有做任何事情,因为在最后一行中会覆盖frag_color。