【问题标题】:glBlendFunc and alpha channelglBlendFunc 和 alpha 通道
【发布时间】:2011-05-02 17:02:19
【问题描述】:

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

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

【问题讨论】:

    标签: c++ opengl transparency


    【解决方案1】:

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

    glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE);
    

    你想要的混合功能吗?

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果我只是将不透明的正方形画成全白,但是如果我在它上面画出半透明的,那么它就不再是全白了。
      猜你喜欢
      • 2010-09-16
      • 2012-06-27
      • 2021-07-21
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 2011-09-07
      相关资源
      最近更新 更多