我有一个火灾模拟,包含大量带纹理的GL_POINTS
。每个粒子都有一个透明的背景,当从特定角度面对火焰时,混合工作正常。然而,从其他角度查看它会显示背景,这些背景应该是透明的,遮挡了在其他人后面渲染的粒子。见下图。
如您所见,粒子的路径上似乎有很多黑框。我怎样才能避免这种情况?我使用的混合函数是 GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
。使用 GL_ONE
作为 glBlendFunc
的第二个参数给出非常相似的结果。
最佳答案
您可以在那里找到完全相同的问题及其解决方案。您确实必须按照 Gigo 的建议对粒子进行排序。原因是只有当颜色从后向前混合时,alpha 混合才看起来正确。
你可以,但是如果你真的想避免排序。有一些更有效的 3d 透明度算法。请参阅:http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-10-transparency/#Order_Independent_Transparency
关于c++ - GL_POINTS 在粒子模拟中相互遮挡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25868949/