【问题标题】:Rendering fire in OpenGL在 OpenGL 中渲染火焰
【发布时间】:2011-05-25 21:51:20
【问题描述】:

我想基于粒子模拟在 OpenGL 中渲染火焰效果。我有数百个粒子,它们具有位置和温度(因此具有颜色)以及所有其他属性。简单地使用 glut 渲染solidSphere 看起来不太现实,因为粒子散布得太宽了。如何根据粒子信息绘制火焰?

【问题讨论】:

  • 听起来你需要插值,或者找到一些可以为你做这件事的方法?
  • 是的,我正在寻找一种在 openGL 中进行插值的方法,因为我对它还不是很熟悉。某种实体动态模型可能......透明度对于在边缘产生逼真的火焰也很重要

标签: c++ opengl graphics glut particles


【解决方案1】:

如果您只是想创建一个逼真的火焰效果,我会使用其他答案中推荐的某种重新存在的库。但在我看来,你是在模拟显示之后。

一个值得尝试的直接解决方案可能是将您当前的球体替换为广告牌(即始终面向相机的图形图像),广告牌在中间为纯白色,向边缘逐渐变透明 - 显然根据图像定位和着色你的粒子。

我觉得更好的解决方案是将火焰作为一组 2D 网格来处理,您可以在这些网格上控制网格上每个顶点的透明度和颜色。可以在 OpenGL 中通过从四边形构造一个平面并使用您的粒子系统来计算(通过您拥有的最近粒子的插值)每个顶点的颜色和透明度。 OpenGL 将为您插入顶点之间的每个像素,并为您提供“区域中的平均粒子”的平滑图片。

【讨论】:

  • 不错!后者可以实现为程序纹理,对吗?嗯...不,这没有意义——每个片段着色器实例可能有太多事情要做。所以我们需要在渲染任何火焰之前每帧创建一次纹理。
  • 谢谢。您能否添加有关这些 2d 网格的更多信息?
  • 如果我们确切地知道您想要实现什么,这将非常有帮助:您是要实时绘制模拟还是仅渲染特定的静止图像?您希望它忠实地代表模拟还是看起来不错?
  • 它用于模拟的实时效果(我使用 SPH 流体模拟火灾)。广告牌的想法使它看起来更棒:-) 感谢您的提示。
【解决方案2】:

您可能想使用粒子系统来渲染火焰效果,这里有一个 NeHe 教程,教您如何做到这一点:http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=19

【讨论】:

  • 我不想使用现有的粒子系统,因为我想了解它们是如何工作的 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
相关资源
最近更新 更多