OpenGL与源和目标alpha的混合

问题描述:

我试图渲染带alpha的纹理到带有alpha的帧缓冲。我需要纹理的透明度由它自己的alpha和alpha渲染到帧缓冲区的组合来控制。OpenGL与源和目标alpha的混合

即:

普通透明度:

(src_colour * src_alpha)+(dst_colour * 1-src_alpha)

要求透明性:

(src_colour * src_alpha * dst_alphe)+( dst_colour * 1-(src_alpha * dst_alpha))

任何人都可以弄清楚如何做到这一点?

我一直工作在这9个小时,现在:-)

我使用OpenGL 1.0与GL11ExtensionPack在Android上,所以我有机会获得glBlendFunc和glBlendFuncSeparate。我不想用着色器去GLES20路由,因为这需要很多代码才能被重写。

感谢, 安德鲁

+0

标准GL混合不支持这一点。着色器也不会(单次传递)。你想达到什么目的?可能还有其他方法。 – Bahbar 2010-11-28 12:32:37

这是我用过的解决方案:

  1. 使颜色和alpha写入
  2. glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE_MINUS_SRC_ALPHA)
  3. 渲染前景对象
  4. disabe alpha写入
  5. 渲染阴影
  6. 渲染被投射阴影
  7. glBlendFunc(GL10.GL_ONE_MINUS_DST_ALPHA,GL10.GL_DST_ALPHA)
  8. 渲染背景对象

这产生只出现在前景对象的阴影的所期望的效果的对象。有效地,阿尔法缓冲区变成具有可变透明度的模板缓冲区。

幸运的是,我的背景对象没有透明度,就好像他们没有使用着色器一样,我不认为有什么方法可以实现这种效果。