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

本文介绍了一个基于GPU的火焰效果实现方案,使用了Hugo老师的火焰纹理和Coolmap资源,通过GLSL Shader实现了火焰的滚动效果。该实现涉及火焰调色板、纹理采样等技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

没有完全把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);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值