在OpenGL中渲染火焰

6

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


听起来你需要插值,或者找一些能为你完成这个任务的方法? - ccook
是的,我正在寻找一种在openGL中进行插值的方法,因为我还不太熟悉它。可能需要某种实体动态模型... 透明度也很重要,以使边缘上的火看起来更真实。 - Etan
2个回答

5

我不想使用现有的粒子系统,因为我想学习它们的工作原理;-) - Etan

5
如果你只是想制作一个逼真的火效果,我建议使用一些现有的库,就像其他答案中推荐的那样。但我觉得你更想展示模拟过程。
一个值得尝试的直接解决方案可能是用广告牌(即始终面向相机的图形图像)替换当前的球体,广告牌在中间是纯白色的,向边缘渐变透明——根据你的粒子定位和着色显然需要调整图像。
我认为更好的解决方案是将火焰视为一组二维网格,你可以控制网格上每个顶点的透明度和颜色。在OpenGL中,可以通过从四边形构造平面,并使用你的粒子系统计算(通过插值从最近的粒子)每个顶点的颜色和透明度来实现此目的。OpenGL会为你在顶点之间插值每个像素,给你一个看起来平滑的“区域内平均粒子”的图片。

不错!后者可以作为过程纹理实现,对吧?嗯...不,那样做没有意义——每个片段着色器实例可能要做太多的工作。所以,在渲染任何火之前,我们需要在每帧创建该纹理一次。 - Kos
谢谢。您能否添加有关这些2D网格的更多信息? - Etan
如果我们知道您想要实现什么,那将非常有帮助:您是想实时绘制模拟还是渲染特定的静态图像?您希望它忠实地呈现模拟结果,还是只需要看起来好看即可? - Elemental
这是针对模拟的实时效果(我使用SPH流体来模拟火灾)。在广告牌上的想法让它看起来更棒了 :-) 感谢您的提示。 - Etan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接