如何使用glblendfuc融合两个图像?

以赛亚书

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

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

它不能显示绿色,它可以显示黑色,我不知道怎么了以及如何解决...

拉比德76

您有一个基本的误解,如果要混合片段着色器的输出,则必须使用Dual Source 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)设置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章