glBlendFunc and alpha channel

glBlendFunc and alpha channel

本文关键字:channel alpha and glBlendFunc      更新时间:2023-10-16

我试图渲染一些透明的对象使用:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

然而,我没有得到我想要的结果。

先画一个完全不透明的正方形,然后再画一个半透明的正方形。颜色就像我所期望的那样,然而,alpha通道不是我想要的完全白色。

基本上我想要下面的等式:

r = old_r*(1.0-a)+r*a;
g = old_g*(1.0-a)+g*a;
b = old_b*(1.0-a)+b*a;
a = old_a + a;

这是可能实现使用glBlendFunc或我必须诉诸着色器和多个fbo回读?

你基本上想要单独的颜色和alpha混合函数,这是通过使用glBlendFuncSeparate:

来实现的
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE);

是否需要混合函数

绘制不透明的正方形,然后检查alpha通道。如果在渲染已知不透明的正方形时没有显示为全白色,则可能是其他设置有问题。