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路由,因为这需要很多代码才能被重写。
感谢, 安德鲁
答
这是我用过的解决方案:
- 使颜色和alpha写入
- glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE_MINUS_SRC_ALPHA)
- 渲染前景对象
- disabe alpha写入
- 渲染阴影
- 渲染被投射阴影
- glBlendFunc(GL10.GL_ONE_MINUS_DST_ALPHA,GL10.GL_DST_ALPHA)
- 渲染背景对象
这产生只出现在前景对象的阴影的所期望的效果的对象。有效地,阿尔法缓冲区变成具有可变透明度的模板缓冲区。
幸运的是,我的背景对象没有透明度,就好像他们没有使用着色器一样,我不认为有什么方法可以实现这种效果。
标准GL混合不支持这一点。着色器也不会(单次传递)。你想达到什么目的?可能还有其他方法。 – Bahbar 2010-11-28 12:32:37