简单来说,流光效果就是在贴图上利用glowmap在原贴图上的移动做动态的发亮效果,来让贴图看起来有光亮在移动。为了让贴图上的亮斑的排布看起来更加贴近自然,我们利用柏林噪声来生成glowmap。事实上,二维或者三维的柏林噪声在图形学上有很多的应用,它可以用来描述很多自然的数学规律,使程序模拟出来的效果看起来更加像是自然生成的。比如墙上的斑点,起伏的海面的高度,熔岩中火焰的亮暗等等。柏林噪声需要振幅和频率两个参数,利用噪声函数生成需要的数据。这里不展开论述,网上有很多相关资料。
为了可以直接利用数据,提高程序效率,我们不使用噪声函数来计算,而是利用预先生成好的一组噪声数据:
unsigned char perm[256] = {151,160,137,91,90,15,
131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,
190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,
88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,
77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,
102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,
135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,
5,202,38,147,118,126,255,82,85,212,207,