本文共 1103 字,大约阅读时间需要 3 分钟。
没有完全把Hugo老师的demo给照搬过来.只照搬了两样东西.那个火焰纹理和Coolmap的资源, 以及核心部分的算法.
算法原始版本见这里这个是我把它程序里用的火焰调色板保存成了一个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);
}Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1349816