【问题标题】:GL_POINTS obscuring each other in particle simulationGL_POINTS 在粒子模拟中相互遮挡
【发布时间】: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


【解决方案1】:

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

在那里您可以找到完全相同的问题及其解决方案。您确实必须按照 Gigo 的建议对粒子进行排序。原因是只有从后向前混合颜色时,alpha 混合才会看起来正确。

你可以,但是如果你真的想避免排序。有一些更有效的 3d 透明度算法。见:http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-10-transparency/#Order_Independent_Transparency

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 2022-01-24
    • 2011-06-27
    相关资源
    最近更新 更多