我有一个火焰模拟,包含大量纹理GL_POINTS
。每个粒子都有一个透明的背景,当从某个角度面向火焰时,混合工作正常。但是,从其他角度查看它会显示背景,这些背景应该是透明的,遮挡在其他背后渲染的粒子。见下图。
如您所见,粒子的方式似乎有很多黑盒子。我怎么能避免这个?我使用的混合函数是GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
。使用GL_ONE
作为glBlendFunc
的第二个参数可以得到非常相似的结果。
答案 0 :(得分:0)
在那里你可以找到完全相同的问题及其解决方案。你确实必须像Gigo建议的那样对粒子进行排序。原因是如果颜色从后到前混合,alpha混合只能看起来正确。
但是,如果你真的想要,你可以避免排序。有三维透明度的算法效率更高一些。请参阅:http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-10-transparency/#Order_Independent_Transparency