原文:【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. 一个例子讲解wav头文件 stm32声音程序 录音和播放 wav

    下面我们一wav头文件来分析一下: 下面是双声道的,16位,48000采样录的wav文件: 打开属性,能看到的有用信息只有比特率了: 上图的比特率就是 wav头文件里的bitrate: 1536kbp ...

  2. 【基础练习】【线性DP】codevs3641 上帝选人题解

    这道题目的数据最后一个有问题,特殊处理了 上题目 题目描写叙述 Description 世界上的人都有智商IQ和情商EQ.我们用两个数字来表示人的智商和情商,数字大就代表其对应智商或情商高. 如今你面 ...

  3. .NET Framework基础知识(三)(转载)

    .正则表达式:用一串字符验证是否符合一种规范,这个规范就是正则表达式. .正则表达式中常用的元字符: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配空白符 \d 匹配数 ...

  4. JNI:no implementation found in native...

    一  javah引发的问题 BUG:D/dalvikvm( 1704): Trying to load lib /data/data/com.ulang/lib/libulangaudio.so 0x ...

  5. js进阶 10-8 伪类选择器有哪几类(自己不用,永远不是自己的)

    js进阶 10-8 伪类选择器有哪几类(自己不用,永远不是自己的) 一.总结 一句话总结:自己不用,永远不是自己的. 0.学而不用,却是为何? 自己不用,永远不是自己的,有需求的时候要想到它,然后操作 ...

  6. Atom编辑器折腾记_(13)JS代码智能提示补全(插件:atom-ternjs)

    题外话 官方正式版尽管内置了.autocomplete-plus;最为明显的一个功能就是记忆你已经输入过的名称进行匹配; 可是针对于某些语言来说,还是有些不足的-.当中JS的补全上就明显不足了-所以须 ...

  7. 【t007】棋盘放置指南车问题

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 按照国际象棋的规则,车可以攻击与之处在同一行或同一列上的棋子.指南车是有方向的车.横向指南车可以攻击与之 ...

  8. Word Break II -- leetcode

    Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...

  9. TensorFlow 学习(五)—— Session

    A Session object encapsulates the environment in which Tensor objects are evaluated. 一个会话对象(session ...

  10. 【records】10.24..10.30

    做的题越来越少了; 我是不是该学下网络流.