OpenGL与源和目标alpha混合

时间:2010-11-28 09:59:52

标签: android opengl-es alpha blend

我正在尝试使用alpha渲染带有alpha的帧缓冲区的纹理。我需要纹理的透明度由它自己的alpha和已经渲染到帧缓冲区的alpha组合控制。

即:

正常透明度:

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

必要的透明度:

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

任何人都可以知道如何做到这一点吗?

我现在已经工作了9个小时: - )

我在Android上使用OpenGL 1.0和GL11ExtensionPack,所以我可以访问glBlendFunc和glBlendFuncSeparate。我不想使用着色器去GLES20路由,因为这需要重写很多代码。

谢谢, 安德鲁

1 个答案:

答案 0 :(得分:1)

这是我用过的解决方案:

  1. 启用颜色和字母写入
  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. 渲染背景对象
  9. 这会产生仅在前景对象上出现的阴影效果。有效地,alpha缓冲区变为具有可变不透明度的模板缓冲区。

    幸运的是,我的背景物体没有透明度,就好像它们一样,我不认为没有任何方法可以在不使用着色器的情况下实现这种效果。