在opengl中订购独立透明度

时间:2017-04-06 15:30:51

标签: opengl opengl-es-2.0 transparency

我有一个包含不透明和透明对象的场景。我将它们分成两组,不透明和透明,从前到后分类不透明,从后到前分开透明。我打开深度缓冲区写入和深度测试,并从前到后绘制不透明项目。然后我关闭深度写入保持深度测试开启并从后向前绘制透明项目。

这一切都很有效,但据我所知,我可以在没有任何特定顺序的情况下绘制透明物品。我已经浏览了类似http://www.openglsuperbible.com/2013/08/20/is-order-independent-transparency-really-necessary/这样的文章,并且看到通过更改混合功能可以实现顺序独立的透明度......但我真的无法理解这一点。

我尝试使用那里建议的混合方程式但是我得到了重叠的透明项目的错误组合颜色,除非我使用通常的(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)。 这真的很简单吗?我只是缺少一些简单的东西吗?

1 个答案:

答案 0 :(得分:0)

“通过更改混合功能可以实现顺序独立的透明度......但我真的无法理解这一点。”

我认为这是你的误解所在。

通过更改混合功能,不能实现与订单无关的透明度。只是某些混合函数本质上与顺序无关。

两个常见的与顺序无关的混合函数是加法(GL_ONE,GL_ONE)和乘法(GL_DST_COLOR,GL_ZERO)。但是如果那些不适合你情况的正确混合函数(通常它们不是),那么你就会遇到排序或使用相对昂贵且复杂的与顺序无关的透明度解决方案,比如文章中提到的A-buffer联的。