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

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

是否要混合功能?

关于c++ - glBlendFunc和Alpha channel ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5860025/

10-15 04:35