新瓶灌旧酒,Hugo老师的Fire算法的GPU版本.

news/2024/7/5 19:28:50

没有完全把Hugo老师的demo给照搬过来.只照搬了两样东西.那个火焰纹理和Coolmap的资源, 以及核心部分的算法.
算法原始版本见这里http://freespace.virgin.net/hugo.elias/models/m_fire.htm

这个是我把它程序里用的火焰调色板保存成了一个bmp

这个GPU版的抓图.注意RTT一定要是8bit的,浮点纹理会出问题.

参数调整的不是很好.比Hugo老师的那个要丑一些.今天晚上懒得弄了.不管了.
以下是用来翻滚火焰的GLSL Shader

//=====FireUp.ps=========== 
/*

 
 
 

*/

uniform sampler2D Texture0;
uniform sampler2D coolMap;
uniform vec4      pixel_dim;


void main(void)
{   
     vec2      texCoord = gl_TexCoord[0].xy;
     texCoord.y = texCoord.y -  pixel_dim.y;//Roll up
     vec4 v3   = texture2D( Texture0, texCoord );
     vec4 v4   = texture2D( coolMap , gl_TexCoord[0].xy );
    
     vec4  aLeft   = texture2D( Texture0, vec2(texCoord.x - pixel_dim.x , texCoord.y                 )  );
     vec4  aRight  = texture2D( Texture0, vec2(texCoord.x + pixel_dim.x , texCoord.y                 )  );
     vec4  aBottom = texture2D( Texture0, vec2(texCoord.x , texCoord.y  -  pixel_dim.y )  );
     vec4  aTop    = texture2D( Texture0, vec2(texCoord.x , texCoord.y  +  pixel_dim.y )  );
    
     if( texCoord.y  -  pixel_dim.y < 0.0 ) aBottom = v3;
     vec4 vFinalColor = aLeft + aBottom + aRight + aTop ;
     vFinalColor = vFinalColor / 4.0;   
     vFinalColor -= 0.09*v4;

     gl_FragColor = vec4( vFinalColor.xxx ,1.0);
}





http://www.niftyadmin.cn/n/3647776.html

相关文章

GUI设计思路之二:Blender -- WinstateBlender/WinTransBlender

现在很多GUI的窗口在显示的时候&#xff0c;都有淡入和淡出的效果. 或者是飞入/飞出的效果(是叫飞入飞出吗?呵呵.). 也就是说1:可以自由控制窗口在两个状态间进行融合. 2: 能自由控制窗口的变换--旋转和缩放等. 为此我把窗口独立成一个个状态:struct _XUI_API_ xuiWindowState…

GUISystem设计思路之三:HotArea的概念。

很多时候&#xff0c;我们希望有些GUI的toolbar能自动消失。这个可以通过循环检测来实现。还有些时候 我们希望鼠标在某个区域动一下或者点一下就让消失掉的toolbar能自动显示出来。或者在一个窗口以外的地方点击的时候就能让窗口自动关闭。这个时候&#xff0c;我们去生写代码…

Mozilla XULRunner 的编译。

Mozilla XULRunner 的编译。潘李亮 2006-10-31Mozilla里有很多好东西。 比如那个js引擎和嵌入式渲染引擎。这段时间在想如果能在游戏里嵌入一个浏览器该多好啊。这个想法用mozilla的渲染引擎来实现在再好不过的了。Mozilla的渲染引擎叫xulrunner。它和firefox 用的是同一个代码…

极限边缘.

极限边缘.最近突然发现自己已经比以前长胖了好多。朋友拿着以前的我的照片都已经认不出来。于是开始决定出去锻炼。突然发现好多以前自己认为是非常剽悍的领域已经都是明日黄花&#xff0c;今天已是我挑战极限的运动。前两个星期和大学舍友一起去踢球。虽然知道以前能满场非的我…

Mozilla浏览器和应用程序的整合---第一步,显示

前段时间终于学会了编译Mozilla XULRunner.顺便修改修改了uBrowser的代码。把它的代码整合到我的引擎中。现在已经能把网页面显示出来了。回头弄弄一个DLL的路径。现在第一次运行的时候会报告有些mozilla的插件找不到。不过似乎第二次就好了。下一个步可以加入键盘鼠标的响应。…

Nebula2探秘14-nGuiServer的创建与使用

Nebula2探秘14-nGuiServer的创建与使用happykevins文关于nGui: nGui是Nebula2本身集成的GUI系统。虽然Radon在mangalore中已经集成了对CEGUI的支持&#xff0c;但是nGui相比之下更加简单易用&#xff0c;而且紧密地与Nebula2结合&#xff0c;不存在CEGUI诸多的兼容性问题。另…

Nebula2探秘15-Simple Application Framework

Nebula2探秘15-Simple Application Frameworkhappykevins文 在经历了前14章的学习之后&#xff0c;本章将介绍一个简单的Nebula2应用程序框架nAppFrame。 nAppFrame可以说是nApplication的最简化版本&#xff0c;去掉了状态机和所有不必要的Packages和Servers。 nAppFrame的代…

Bug经典回放(四)

Bug现象: 还是调试别人的程序. 这次是GUI. 我们的GUI是基于SDL OpenGL的. 程序运行以后进行视频播放.在出现的工具条上不停的点击几下后. 整个GUI系统均停止响应. 工具条有个属性.在开始播放音乐或者视频后.会根据播放引擎通过一个引擎来设置toolbar的属性. 比如.在同一…