GL_POINTS在粒子模拟中相互模糊

时间:2014-09-16 12:36:32

标签: c++ opengl transparency point particle-system

我有一个火焰模拟,包含大量纹理GL_POINTS。每个粒子都有一个透明的背景,当从某个角度面向火焰时,混合工作正常。但是,从其他角度查看它会显示背景,这些背景应该是透明的,遮挡在其他背后渲染的粒子。见下图。

enter image description here

如您所见,粒子的方式似乎有很多黑盒子。我怎么能避免这个?我使用的混合函数是GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA。使用GL_ONE作为glBlendFunc的第二个参数可以得到非常相似的结果。

1 个答案:

答案 0 :(得分:0)

http://www.opengl-tutorial.org/intermediate-tutorials/billboards-particles/particles-instancing/#The_main_simulation_loop

在那里你可以找到完全相同的问题及其解决方案。你确实必须像Gigo建议的那样对粒子进行排序。原因是如果颜色从后到前混合,alpha混合只能看起来正确。

但是,如果你真的想要,你可以避免排序。有三维透明度的算法效率更高一些。请参阅:http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-10-transparency/#Order_Independent_Transparency

相关问题