【发布时间】:2014-11-10 05:07:28
【问题描述】:
我有一个火灾模拟,包含大量带纹理的GL_POINTS。每个粒子都有一个透明的背景,当从特定角度面对火焰时,混合工作正常。但是,从其他角度查看它会显示背景,它应该是透明的,遮蔽了在其他人后面渲染的粒子。见下图。
如您所见,粒子的路径上似乎有很多黑匣子。我怎样才能避免这种情况?我使用的混合函数是GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA。使用GL_ONE 作为glBlendFunc 的第二个参数会得到非常相似的结果。
【问题讨论】:
-
类似于stackoverflow.com/q/23280692/3530129。可能会有不同的考虑,因为这是关于粒子系统,而不仅仅是使用透明纹理的一般渲染。所以我不确定它是否应该是重复的。
-
禁用深度缓冲区
-
@BeyelerStudios 只需禁用深度测试即可解决重叠背景的问题,但会在纹理的其他部分造成透明度问题
-
您可能需要对粒子进行排序并以正确的顺序渲染它们,即从后到前。
-
对于发光粒子,请尝试添加剂混合。对于“漂亮”的粒子效果,您需要了解几个技巧。我猜你想要一个火焰效果:检查here
标签: c++ opengl transparency point particle-system