【问题标题】:how can i use glblendfuc to blend two image?如何使用 glblendfuc 混合两个图像?
【发布时间】:2020-03-23 09:26:48
【问题描述】:

我想在我的着色器中混合两个纹理,所以我在着色器中的代码是这样的:

out vec4 fragColor1;
out vec4 fragColor2;
void main(){
fragColor1=vec4(1.0,0.0,0.0,1.0);
fragColor2=vec4(0.0,1.0,0.0,1.0);
}

当我使用时

glEnable(GL_BLEND);
glBlendFunc(GL_ONE,GL_ZERO);

它只在屏幕上显示红色,但是当我使用时

glEnable(GL_BLEND);
glBlendFunc(GL_ZERO,GL_ONE);

它不能显示绿色,它显示黑色,我不知道是什么问题以及如何解决它......

【问题讨论】:

标签: glsl shader glfw opengl-3 glblendfunc


【解决方案1】:

你有一个基本的误解,如果你想混合片段着色器的输出,那么你将不得不使用Dual Source Blending
Blending,将组合片段的连续片段着色器输出,当多个几何图形连续渲染时。
此外,默认的帧缓冲区只有一个颜色缓冲区,因此写入帧缓冲区中的多个目标是没有意义的。
如果您可以在片段着色器中访问两种纹理的颜色,那么您根本不需要任何Blending,因为您可以在片段着色器中使用mix 的颜色:

out vec4 fragColor;

void main(){
    vec4 color1 = ...;
    vec4 color2 = ...;
    float a = 0.5;

    fragColor = mix(color1, color2, a);
}

注意,a 也可以由图像的 Alpha 通道设置(例如 a = color2.a)。

【讨论】:

  • "混合不会组合多个片段着色器输出的颜色。" 从技术上讲,双源混合可以;)
  • 谢谢,我知道我可以使用混合,我只是想尝试双源混合,我将输出设置为这样layout(location = 0, index = 0) out vec4 outputColor0;layout(location = 0, index = 1) out vec4 outputColor1;,但显示仍然如我上面描述的那样,我我有点困惑..
猜你喜欢
  • 2015-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
相关资源
最近更新 更多