glBlendFunc和alpha通道

时间:2011-05-02 17:02:19

标签: c++ opengl transparency

我正在尝试使用以下方式渲染一些透明对象:

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进行回读?

2 个答案:

答案 0 :(得分:7)

您基本上需要单独的颜色和alpha混合函数,这可以通过使用glBlendFuncSeparate来实现:

glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE);

你想要的混合功能。

答案 1 :(得分:-1)

只需绘制不透明的方块,然后检查Alpha通道。如果在渲染已知不透明方块时它没有显示为完全白色,则可能是某些其他设置有问题。