【问题标题】:OpenGL; Overlapping Alpha-Transparent ParticlesOpenGL;重叠 Alpha 透明粒子
【发布时间】:2013-12-08 07:47:50
【问题描述】:

我正在用 C 语言编写一个 OpenGL 程序,该程序通过 pnglib 实现使用 PNG(具有透明度)作为纹理的 alpha 透明广告牌粒子。但是,我发现粒子的透明区域仍然会替换在它之前调用的粒子,这些粒子也在它后面。换句话说,新调用的粒子虽然在某些区域是透明的,但与之前调用的一些粒子完全重叠,而之前调用的粒子应该通过透明度显示。

为了形象化这种效果,我附上几张图片来显示问题:

最初我将粒子从最旧到最新调用:

但是当视图改变时,重叠效果很明显:

当我决定颠倒调用顺序时,我得到相反的结果:

我相信解决这个问题的方法是按照从相机最远到最近的顺序调用粒子。然而,遍历每个活动粒子,从最远到最近对它们进行排序,然后在每个显示帧调用每个粒子,计算量都很大。我希望找到一个更简单、更有效的解决方案。我已经尝试过使用glBlendFunc(),但似乎没有sfactor 或dfactor 有效。

【问题讨论】:

  • 尝试先渲染地面和坦克,然后再渲染粒子。
  • 我投票决定将此问题作为题外话结束,因为所有图像都指向保管箱并且图像似乎消失了。

标签: c opengl transparent libpng particles


【解决方案1】:

首先绘制所有不透明的几何体。然后,在绘制粒子之前,通过调用 glDepthMask (GL_FALSE) 禁用深度缓冲区写入

这将解决大部分渲染问题。

按与相机的距离对粒子进行排序仍然是一个好主意。以今天的 CPU 能力,这应该不是什么大问题。

【讨论】:

  • 完美!非常感谢。
猜你喜欢
  • 1970-01-01
  • 2012-11-20
  • 2012-12-10
  • 2011-10-29
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多