【发布时间】:2011-05-16 19:49:04
【问题描述】:
我正在尝试将带有 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 路线,因为这需要重写大量代码。
谢谢, 安德鲁
【问题讨论】:
-
标准 GL 混合不支持此功能。着色器也不(单次通过)。你想达到什么目的?可能还有其他方法。
-
该游戏是一个垂直滚动的射击游戏,从上到下的视角观看。前景中渲染了风景、宇宙飞船、导弹等,背景是天空和星空。然后是一些细节,例如在风景中添加的建筑物,这会产生阴影。 (阴影被烘焙到纹理中。)我需要阴影只影响前景中的内容,而不是背景。我使用模板缓冲区实现了这一点,但是一些游戏的精灵具有 alpha 透明度,因此模板缓冲区的二进制开/关解决方案是不够的。阴影需要混合。
标签: android opengl-es alpha blend