原文:【HLSL学习笔记】WPF Shader Effect Library算法解读之[DirectionalBlur]

方位模糊是一个按照指定角度循环位移并叠加纹理,最后平均颜色值并输出的一种特效。效果如下图:

Angle=0;BlurAmount=0.1;

 

Angle=45;BlurAmount=0.1;

看看源代码:

++++++++++++++++++++++++++++++++++++++

         //模糊的角度

float Angle : register(C0);

         //模糊的数量

float BlurAmount : register(C1);

sampler2D  implicitInputSampler : register(S0);

float4 main(float2 uv : TEXCOORD) : COLOR

{

    float4 c = 0;

    //0.0174533的含义是2*PI/360,这里是将角度转化为弧度

    float rad = Angle * 0.0174533f;

    //计算x、y轴的偏移分量

    float xOffset = cos(rad);

    float yOffset = sin(rad);

    //

    for(int i=0; i<16; i++)

    {

             //利用角度参数和模糊的数量参数来定义新的纹理坐标

        uv.x = uv.x - BlurAmount * xOffset;

        uv.y = uv.y - BlurAmount * yOffset;

        //将每一次的纹理都叠加

        c += tex2D(implicitInputSampler, uv);

    }

    //求取纹理颜色的平均值

    c /= 16;   

    return c;

}

++++++++++++++++++++++++++++++++++++++

代码非常简单,不过对纹理进行偏移然后叠加,最后将叠加的值进行平均,这种方法还是头一次见,如果不进行最后一步平均,得到的将是纯白的画面,因为经过16次循环叠加的向量c,其中的rgba值都应该远大于1了,所以变成了纯白。

 

根据这种思想,我们可以稍微改变一下,得到自己想要的效果,比如爆炸效果或者汇聚效果等。这里稍作改变如下:

+++++++++++++++++++++++++++++++++++++++

float Scale : register(C0);

sampler2D  implicitInputSampler : register(S0);

float4 main(float2 uv : TEXCOORD) : COLOR

{

    float4 c=0;  

    for(int i=0;i<5;i++)

         {

          //设置缩放比例

     uv.xy/=Scale;  

         //设置缩放后的原图中心依然位于整个画面的中心位置 

     uv.xy+=(1-1/Scale)/2;  

     c+=tex2D(implicitInputSampler,uv);

         }

    c/=5;

    return c;

}

+++++++++++++++++++++++++++++++++++++++

设置Scale为1.02,则得到如下效果:

 

Scale=1.06

 

 

Scale=0.9

 

采用这个方法,利用不同的算法可以很方便地得到各种不同的特效。

【HLSL学习笔记】WPF Shader Effect Library算法解读之[DirectionalBlur]的更多相关文章

  1. 【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]

    原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[Embossed] Embossed(浮雕效果)          浮雕效果主要有两个参数:Amount和Wid ...

  2. 【HLSL学习笔记】WPF Shader Effect Library算法解读之[BandedSwirl]

    原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[BandedSwirl] 因工作原因,需要在Silverlight中使用Pixel Shader技术,这对于我来 ...

  3. V-rep学习笔记:Reflexxes Motion Library 3

    路径规划 VS 轨迹规划 轨迹规划的目的是将输入的简单任务描述变为详细的运动轨迹描述.注意轨迹和路径的区别:Trajectory refers to a time history of positio ...

  4. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  5. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记

    机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...

  6. V-rep学习笔记:Reflexxes Motion Library 2

    VREP中的simRMLMoveToPosition函数可以将静态物体按照设定的运动规律移动到指定的目标位置/姿态.If your object is dynamically enabled, it ...

  7. 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT)

    再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Blueste ...

  8. HMM的学习笔记1:前向算法

    HMM的学习笔记 HMM是关于时序的概率模型.描写叙述由一个隐藏的马尔科夫链随机生成不可观測的状态随机序列,再由各个状态生成不可观測的状态随机序列,再由各个状态生成一个观測而产生观測的随机过程. HM ...

  9. jvm学习笔记一(垃圾回收算法)

    一:垃圾回收机制的原因 java中,当没有对象引用指向原先分配给某个对象的内存时候,该内存就成为了垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息 ...

随机推荐

  1. [Swift] Storyboard outlet and action

    To programmaictlly change the content of app, we need to contect storyboard to a view controller. To ...

  2. 使用xerces库的一个注意事项

    作者:朱金灿 来源:http://blog.csdn.net/clever101 使用xerces库解析xml文件,结果出现这样一些链接错误: public: static classxercesc_ ...

  3. ds finder 唤醒

    http://www.hangge.com/blog/cache/detail_594.html

  4. Vue.js开发环境搭建的介绍

    包含了最基础的Vue.js的框架,包含了打包工具和测试工具,开发调试的最基本的服务器,不需要关注细节,只需关注Vuejs对项目的实现 npm在国内的网络使用较慢,所以推荐下载安装淘宝的镜像 1: 2: ...

  5. iOS开发SDWebImage的基本使用

    #import "ViewController.h" #import "UIImageView+WebCache.h" #import "SDWebI ...

  6. 在shell脚本中调用sqlplus 分类: H2_ORACLE 2013-06-23 13:01 1437人阅读 评论(0) 收藏

    #!/bin/bash sqlplus dc_file_data_js/dc_file_data_js << EOF1 set linesize 500; set pagesize 100 ...

  7. js,jquery遍历数组,对象

    each的用法  1.数组中的each 复制代码 var arr = [ "one", "two", "three", "four ...

  8. 在VS2015中用C++创建DLL并用C++调用且同一时候实现对DLL的调试

    一:用C++创建DLL            依照[在VS2015中用C++编写可被其他语言调用的动态库DLL]提示创建C++编写的DLL.或參考[在VS2015中用C++创建DLL并用C#调用且同一 ...

  9. jQuery 淡入淡出

    演示 jQuery fadeIn() 方法: <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  10. sublime-1 sublime设置到鼠标右键

    sublime-1 sublime设置到鼠标右键 一.总结 一句话总结:其实windows可以更加熟悉一点才好,毕竟用的那么多,regedit可以添加注册,也可以添加鼠标右键选项. 二.sublime ...