http://blog.csdn.net/a3070173/archive/2008/11/27/3390477.aspx

  1. 图像过滤无论是在作图工具还是特效的实现上都时有运用,这里发一些通常会使用到的图像
  2. 过滤着色器供有需要的朋友参考.
  3. 备注:这里列出的都是片元着色器,顶点着色器都是一样地简单变换顶点和传递纹理坐标.
  4. 高斯过滤 - 常用于进行图像模糊
  5. 横向过滤:
  6. const int g_iWeightNumber = 17;
  7. uniform sampler2D g_FilterTexture;  // 被过滤纹理
  8. uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
  9. uniform vec2 g_aryVerticalOffset[g_iWeightNumber];  // 横向Blur偏移数组
  10. void main()
  11. {
  12. vec4 vec4Sum = vec4(0.0);
  13. for(int i = 0; i < g_iWeightNumber; ++i)
  14. {
  15. vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryVerticalOffset[i])*g_aryWeight[i];
  16. }
  17. gl_FragColor = vec4Sum;
  18. }
  19. 纵向过滤:
  20. const int g_iWeightNumber = 17;
  21. uniform sampler2D g_FilterTexture;  // 被过滤纹理
  22. uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
  23. uniform vec2 g_aryHorizontalOffset[g_iWeightNumber];    // 横向Blur偏移数组
  24. void main()
  25. {
  26. vec4 vec4Sum = vec4(0.0);
  27. for(int i = 0; i < g_iWeightNumber; ++i)
  28. {
  29. vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryHorizontalOffset[i])*g_aryWeight[i];
  30. }
  31. gl_FragColor = vec4Sum;
  32. }
  33. Mean过滤 - 用于纹理抗锯齿
  34. // Mean kernel
  35. // 1 1 1
  36. // 1 1 1
  37. // 1 1 1
  38. const int g_iWeightNumber = 9;
  39. uniform sampler2D g_FilterTexture;  // 被过滤纹理
  40. uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
  41. uniform vec2 g_aryOffset[g_iWeightNumber];  // 横向Blur偏移数组
  42. void main()
  43. {
  44. vec4 vec4Sum = vec4(0.0);
  45. if (gl_TexCoord[0].s < 0.495)
  46. {
  47. for(int i = 0; i < g_iWeightNumber; ++i)
  48. {
  49. vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryOffset[i])*g_aryWeight[i];
  50. }
  51. }
  52. else if (gl_TexCoord[0].s > 0.505)
  53. {
  54. vec4Sum = texture2D(g_FilterTexture, gl_TexCoord[0].st);
  55. }
  56. else
  57. {
  58. vec4Sum = vec4(1.0, 0.0, 0.0, 1.0);
  59. }
  60. gl_FragColor = vec4Sum;
  61. }
  62. Laplacian过滤 - 用于突显图像轮廓
  63. // Edge detection kernel (Laplacian filter).
  64. // 0  -1 0
  65. // -1  4 -1
  66. // 0  -1 0
  67. const int g_iWeightNumber = 9;
  68. uniform sampler2D g_FilterTexture;  // 被过滤纹理
  69. uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
  70. uniform vec2 g_aryOffset[g_iWeightNumber];  // 横向Blur偏移数组
  71. void main()
  72. {
  73. vec4 vec4Sum = vec4(0.0);
  74. if (gl_TexCoord[0].s < 0.495)
  75. {
  76. for(int i = 0; i < g_iWeightNumber; ++i)
  77. {
  78. vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryOffset[i])*g_aryWeight[i];
  79. }
  80. vec4 vec4BaseColor = texture2D(g_FilterTexture, gl_TexCoord[0].st);
  81. vec4Sum += vec4BaseColor*0.1;
  82. }
  83. else if (gl_TexCoord[0].s > 0.505)
  84. {
  85. vec4Sum = texture2D(g_FilterTexture, gl_TexCoord[0].st);
  86. }
  87. else
  88. {
  89. vec4Sum = vec4(1.0, 0.0, 0.0, 1.0);
  90. }
  91. gl_FragColor = vec4Sum;
  92. }
  93. Emboss过滤 - used to simulate the relief of an image
  94. // Emboss filter
  95. // 2   0  0
  96. // 0  -1  0
  97. // 0   0  -1
  98. const int g_iWeightNumber = 9;
  99. uniform sampler2D g_FilterTexture;  // 被过滤纹理
  100. uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
  101. uniform vec2 g_aryOffset[g_iWeightNumber];  // 横向Blur偏移数组
  102. void main()
  103. {
  104. vec4 vec4Sum = vec4(0.0);
  105. if (gl_TexCoord[0].s < 0.495)
  106. {
  107. for(int i = 0; i < g_iWeightNumber; ++i)
  108. {
  109. vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryOffset[i])*g_aryWeight[i];
  110. }
  111. vec4Sum += 0.5;
  112. }
  113. else if (gl_TexCoord[0].s > 0.505)
  114. {
  115. vec4Sum = texture2D(g_FilterTexture, gl_TexCoord[0].st);
  116. }
  117. else
  118. {
  119. vec4Sum = vec4(1.0, 0.0, 0.0, 1.0);
  120. }
  121. gl_FragColor = vec4Sum;
  122. }
  123. Sharpness过滤 - 突显图像的细节
  124. // Sharpness filter
  125. // -1  -1  -1
  126. // -1   9  -1
  127. // -1  -1  -1
  128. const int g_iWeightNumber = 9;
  129. uniform sampler2D g_FilterTexture;  // 被过滤纹理
  130. uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
  131. uniform vec2 g_aryOffset[g_iWeightNumber];  // 横向Blur偏移数组
  132. void main()
  133. {
  134. vec4 vec4Sum = vec4(0.0);
  135. if (gl_TexCoord[0].s < 0.495)
  136. {
  137. for(int i = 0; i < g_iWeightNumber; ++i)
  138. {
  139. vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryOffset[i])*g_aryWeight[i];
  140. }
  141. }
  142. else if (gl_TexCoord[0].s > 0.505)
  143. {
  144. vec4Sum = texture2D(g_FilterTexture, gl_TexCoord[0].st);
  145. }
  146. else
  147. {
  148. vec4Sum = vec4(1.0, 0.0, 0.0, 1.0);
  149. }
  150. gl_FragColor = vec4Sum;
  151. }
  152. Demo效果截图:
  153. exe文件:http://www.fileupyours.com/view/219112/GLSL/Image%20Filter%20Demo.rar

GLSL实现Image Filter 【转】的更多相关文章

  1. mipmap一

    讲一下mipmap 生成的时候 指定texture 的mipmaplevel 8 然后memory自动就会那么大的 画的时候要在lineraspace(因为我是gpucopy所以不涉及这个问题 可能) ...

  2. django 操作数据库--orm(object relation mapping)---models

    思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...

  3. GLSL实现Glow效果 [转]

    http://blog.csdn.net/a3070173/archive/2008/11/04/3220940.aspx Glow即辉光效果现在已成为3D图形中一个引人注目的特效.本文主要介绍如何使 ...

  4. GLSL/C++ 实现滤镜效果

    入门效果之浮雕 "浮雕"图象效果是指图像的前景前向凸出背景.常见于一些纪念碑的雕刻上.要实现浮雕事实上很easy.我们把图象的一个象素和左上方的象素进行求差运算.并加上一个灰度.这 ...

  5. GLSL实现Glow效果 【转】

    http://blog.csdn.net/a3070173/article/details/3220940 Glow即辉光效果现在已成为3D图形中一个引人注目的特效.本文主要介绍如何使用GLSL实现一 ...

  6. JavaWeb——Filter

    一.基本概念 之前我们用一篇博文介绍了Servlet相关的知识,有了那篇博文的知识积淀,今天我们学习Filter将会非常轻松,因为Filter有很多地方和Servlet类似,下面在讲Filter的时候 ...

  7. 使用Visual Studio SDK制作GLSL词法着色插件

    使用Visual Studio SDK制作GLSL词法着色插件 我们在Visual Studio上开发OpenGL ES项目时,避免不了写Shader.这时在vs里直接编辑shader就会显得很方便. ...

  8. 以bank account 数据为例,认识elasticsearch query 和 filter

    Elasticsearch 查询语言(Query DSL)认识(一) 一.基本认识 查询子句的行为取决于 query context filter context 也就是执行的是查询(query)还是 ...

  9. AngularJS过滤器filter-保留小数,小数点-$filter

    AngularJS      保留小数 默认是保留3位 固定的套路是 {{deom | number:4}} 意思就是保留小数点 的后四位 在渲染页面的时候 加入这儿个代码 用来精确浮点数,指定小数点 ...

随机推荐

  1. Golang 做的几个跟性能有关的工具

    1.Vegeta https://github.com/tsenart/vegeta Vegeta 是一个万能的 HTTP 负载测试工具,提供命令行工具和一个开发包. 使用方法: $ vegeta a ...

  2. mysql问题Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)的解决方法

    在mysql命令行界面输入 mysql> set old_passwords=0;mysql> SET PASSWORD FOR hhds_test=PASSWORD('hhds_test ...

  3. python在linux上的GUI无法弹出界面

    在进行python写GUI程序的时候,使用Tkinter,发现无法执行程序,报错如下: X connection to localhost:10.0 broken(explicit kill or s ...

  4. WebGoat学习——跨站请求伪造(Cross Site Request Forgery (CSRF))

    跨站请求伪造(Cross Site Request Forgery (CSRF)) 跨站请求伪造(Cross Site Request Forgery (CSRF))也被称为:one click at ...

  5. TopFreeTheme精选免费模板【20130619】

    今天给大家推荐7款最新精选的WordPress主题和一个WooCommerce订单跟踪插件,如果你有更换自己博客主题的想法或者正要做自己的博客,不妨试试.一些是WordPress商业模板,但都可以免费 ...

  6. OC使用inline替代宏

    CG_INLINE voidGCDDelay(int64_t delayInSeconds,dispatch_block_t block){ dispatch_time_t popTime = dis ...

  7. 扩展UIColor类

    在开发中,UI给出的颜色值有时候是十六进制的,有时候给出的是RGB(255,255,255)这样的形式的,而iOS系统提供的方法中并没有直接传递这两种值返回UIColor对象的,这里自己封装了一个以便 ...

  8. oracle查看相关用户表

    select TABLE_NAME from user_tables  //当前用户表 select TABLE_NAME from dba_tables  //所有用户表+系统表 select TA ...

  9. 解决Windows时间同步失败问题!系统时间同步设置!

    使用NTP协议可以让你的计算机自动与服务器上的时间同步.从而保持最准确的时间. 中国国家授时中心的IP地址是:210.72.145.44 (至少我一直没ping通) 在Windows XP/2000/ ...

  10. VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN的区别

    最近软矿频繁地介绍了各种VPN,有免费的PacketiX.NET和Hotspot Shield,有付费的Astrill VPN,iVPN和PureVPN.在介绍这些VPN的时候,常常会说到PPTP.L ...