2017-04-06 53 views
0

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

这一切都很好,但从我的理解我可以绘制透明的项目没有任何特定的顺序。我已经阅读了像这样的文章http://www.openglsuperbible.com/2013/08/20/is-order-independent-transparency-really-necessary/,并且看到可以通过更改混合功能来实现顺序独立透明度......但我无法真正理解这一点。

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

+0

可能重复的[OpenGL - 如何创建顺序无关的透明度?](http://stackoverflow.com/questions/37780345/opengl-how-to-create-order-independent-transparency) – Vallentin

+1

这是用于桌面OpenGL或OpenGL ES? –

+1

另外,您是否阅读过关于“何时重要”的文档部分? –

回答

0

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

我认为这是你误解的地方。

不是通过改变混合函数可以实现顺序无关的透明度。只是某些混合函数本质上是独立的顺序。

两个常见的与顺序无关的混合函数是加法的(GL_ONE,GL_ONE)和乘法的(GL_DST_COLOR,GL_ZERO)。但如果这些功能对您的情况来说不是正确的混合函数(通常不是),那么您就会陷入排序或者使用相对昂贵和复杂的与顺序无关的透明解决方案,例如文章中提到的A缓冲区链接。