Java OpenGL-GLSL着色器,Alpha混合

Java OpenGL-GLSL着色器,Alpha混合,java,opengl,glsl,shader,fragment-shader,Java,Opengl,Glsl,Shader,Fragment Shader,我正在使用此片段着色器: #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(t

我正在使用此片段着色器:

#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  ;
}
现在,为了传递颜色,我给出一个rgba值。我把alpha值调高。纹理也是rgba,它是一个PNG文件。我使用混合模式GL_SRC_ALPHA GL_ONE_减去GL_SRC_ALPHA

现在的问题是,我传入的alpha值不会影响任何东西。

我想让它….

我最后做了这样一件事:

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])) ;

很好用

您希望它具体影响什么(通过设置两次_Color…,您几乎期望在片段着色器中发生混合)?这实际上是纹理的值(texture1,pass\u TextureCoord)。顺便说一句,你感兴趣的是*pass\u Color.a(这是用于混合的值,而不是pass\u Color.a)。你是什么意思?texture()调用上的.a不编译我的意思是只有alpha组件影响混合。将纹理的alpha分量乘以pass_Color.a的alpha分量。两者相乘的结果决定了片段的混合方式。这没有任何意义,为了保持一致性,您应该坚持使用相同的组件选择语法。使用
tex[0]*pass\u Color[0]
tex.r*pass\u Color.r
以便人们能够理解您的代码。此外,您只需执行
tex.rgba*pass\u Color.rgba
tex*pass\u Color
即可获得相同的结果,而不会使代码不必要地难以阅读。如果这样做有效,而原始版本没有,则听起来您的驱动程序有令人难以置信的错误。不,结果是alpha值没有正确传递。。所以我想这就是它成功的原因。。但事实上是另外一回事。。