c++ - GL_POINTS 在粒子模拟中相互遮挡

标签 c++ opengl transparency point particle-system

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

enter image description here

如您所见,粒子的路径上似乎有很多黑框。我怎样才能避免这种情况?我使用的混合函数是 GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA。使用 GL_ONE 作为 glBlendFunc 的第二个参数给出非常相似的结果。

最佳答案

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

关于c++ - GL_POINTS 在粒子模拟中相互遮挡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25868949/

相关文章:

c++ - C++ 中嵌套增强型 for 循环的范围

c++ - 替换 glaux 函数

c++ - OpenGL C++ : Struct wrapper for VBO won't initialize members

java - 从 Java UI 将鼠标事件传递给后面的应用程序

c++ - 为什么分配器需要构造和销毁接口(interface)?

c++ - 在 C++ (linux) 中设置 GPIO 的最快方法

c++ - 如何用箭头平移二维对象?

delphi - 如何使用 Delphi 将部分透明的图像打印到 PDF Canvas?

css - 带有图像(作为链接)的透明框(div)——可按比例调整大小?

C++如何将字节读取为独立于整数字节序的?