Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在OpenGL中绘制火灾_C++_Opengl_Graphics_Glut_Particles - Fatal编程技术网

C++ 在OpenGL中绘制火灾

C++ 在OpenGL中绘制火灾,c++,opengl,graphics,glut,particles,C++,Opengl,Graphics,Glut,Particles,我想在OpenGL中基于粒子模拟渲染火焰效果。我有数百个粒子,它们有一个位置和一个温度(因此也有一种颜色),以及它们的所有其他属性。使用glut简单地渲染一个solidSphere,看起来不太真实,因为粒子分布太广。如何根据粒子信息绘制火焰?您可能想使用粒子系统渲染火焰效果,这里有一个NeHe教程,介绍如何做到这一点:如果您只是尝试创建真实的火焰效果,我会使用其他答案中推荐的某种重新存在的库。但在我看来,你是在追求模拟的展示 P>一个值得尝试的直接解决方案可能是用广告牌(即总是面向相机的图形图

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

您可能想使用粒子系统渲染火焰效果,这里有一个NeHe教程,介绍如何做到这一点:

如果您只是尝试创建真实的火焰效果,我会使用其他答案中推荐的某种重新存在的库。但在我看来,你是在追求模拟的展示

<> P>一个值得尝试的直接解决方案可能是用广告牌(即总是面向相机的图形图像)替换你当前的球体,中间是实心的白色,并逐渐变为透明的边缘——明显地根据你的粒子来定位和着色图像。
我觉得一个更好的解决方案是将火焰作为一组2D网格来处理,在这些网格上可以控制网格上每个顶点的透明度和颜色。在OpenGL中,可以通过从四边形构造一个平面来实现这一点,并使用粒子系统计算(通过从最近的粒子插值)每个顶点的颜色和透明度。OpenGL将为您在顶点之间插值每个像素,并为您提供“区域中的平均粒子”的平滑图像。

听起来您需要插值,或者找到一些方法为您完成此操作?是的,我正在寻找一种方法在OpenGL中进行此插值,因为我还不太熟悉它。某种固体动力学模型可能。。。透明度对于在边缘上制造真实的火焰也很重要尼斯!后者可以实现为程序纹理,对吗?隐马尔可夫模型。。。不,这没有意义-每个片段着色器实例可能有太多的事情要做。所以我们需要在渲染任何火焰之前,每帧创建一次纹理。谢谢。你能添加更多关于2d网格的信息吗?如果我们确切地知道你想要实现什么,这将非常有帮助:你是在尝试实时绘制模拟,还是只是渲染特定的静物?你想让它忠实地代表模拟,还是让它看起来好看?这是为了模拟的实时效果(我使用SPH流体模拟火灾)。广告牌的创意让它看起来更棒:-)谢谢你的提示。我不想使用现有的粒子系统,因为我想了解它们是如何工作的;-)