OpenGL材质实例分析(7)雪花飘落效果

  

研究了一个雪花飘落效果,感觉挺不错的,分享给大家,效果如下:

  

 OpenGL材质实例分析(7)雪花飘落效果

  

代码如下:

        材质“shadertoy/片”{//https://www.shadertoy.com/view/4d2Xzc   {属性   iMouse(“老鼠Pos”,向量)=(100100,0,0)   iChannel0 (“iChannel0”、2 d)=鞍咨眥}   iChannelResolution0 (“iChannelResolution0向量)=(100100,0,0)   }      CGINCLUDE   # include“UnityCG.cginc”   # pragma目标3.0   # pragma glsl      #定义vec2 float2   #定义vec3 float3   #定义vec4 float4   #定义mat2 float2x2   #定义iGlobalTime _Time.y   #定义mod作用   #定义混合昆虫蜜   #定义:量化   #定义部分裂缝分析   #定义texture2D tex2D//屏幕的尺寸   #定义iResolution _ScreenParams//屏幕中的坐标,以像素为单位   #定义gl_FragCoord ((_iParam.srcPos.xy/_iParam.srcPos.w) * _ScreenParams.xy)      #定义PI2 6.28318530718   #定义3.14159265358979π   #定义halfpi(π* 0.5)   #定义>   浮动dd=150;   for (int i=0;i之前      

在理解这段代码前,先理解怎么画一个圈,代码如下:
  

        浮动dd=30;   for (int i=0;i之前      

然后再准备一张贴的图,图片中间是一个白色像素,周围都是黑色

  

 OpenGL材质实例分析(7)雪花飘落效果

  

效果如下:

  

 OpenGL材质实例分析(7)雪花飘落效果

  

这段代码处于片段着色器中,意味着屏幕上每个点都会进行上述的算法。具体如下,遍历贴图中该点周围的点(上面的代码中为距离该点为20单位的圆上的点),把周围点中最亮的作为该点的颜色。上面的贴图有点特殊,只有一个点是白色,其余点都是黑色的。那么只有距离该点正好为20单位的点才会变成亮色,其余的点都是黑色,如上图的结果。一句话总结上面算法的效果:效果可以参考文末的图片。

  

接下来理解这段代码:

        浮动dd=150;   for (int i=0;i之前      

输出结果如下:

  

 OpenGL材质实例分析(7)雪花飘落效果”> <br/>
  </p>
  <p> 1.0), + 0.7 * cos(7.0 *)的图像如下:</p>
  <p> <img src=

  

b)算法向的中量的路径为:

  

 OpenGL材质实例分析(7)雪花飘落效果

  

结果就很清晰了,其实这里算法和《【OpenGL】材质实例分析(二)——心》中绘制心形的算法很类似。

  

最后加上时间就可以实现动画了:

     =vec2 vec2 (cos(一个),sin ()) * (1.0 + 0.6 * cos (7.0 * + iGlobalTime)) + vec2 (0.0, iGlobalTime);      

第一个iGlobalTime,用来控制雪花的旋转,第二个iGlobalTime使雪花下落。
  

  

2)后期颜色等处理

  

这里可以理解为一种后效处理,具体是如下的代码贡献的效果:

        坳=战俘(坳,vec3(1.0, 2.0, 3.0)) *战俘(4.0 * p.y * (1.0 -p.y), 0.2);      

),战俘(坳,vec3(1.0, 2.0, 3.0))这句话使得颜色变成暖色调.col值的范围为[0,1],对小数继续战俘运算,次数越高,该值越小,比如:0.5的1次方是0.5,2次方为0.25,3次方为0.125等,所以这句话的作用很明显:红成份不变,绿色变小一些,蓝色变的更小,达到的效果,使得整体颜色会偏向暖色调。

OpenGL材质实例分析(7)雪花飘落效果