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值没有正确传递。。所以我想这就是它成功的原因。。但事实上是另外一回事。。