GLSL实现Image Filter 【转】
http://blog.csdn.net/a3070173/archive/2008/11/27/3390477.aspx
- 图像过滤无论是在作图工具还是特效的实现上都时有运用,这里发一些通常会使用到的图像
- 过滤着色器供有需要的朋友参考.
- 备注:这里列出的都是片元着色器,顶点着色器都是一样地简单变换顶点和传递纹理坐标.
- 高斯过滤 - 常用于进行图像模糊
- 横向过滤:
- const int g_iWeightNumber = 17;
- uniform sampler2D g_FilterTexture; // 被过滤纹理
- uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
- uniform vec2 g_aryVerticalOffset[g_iWeightNumber]; // 横向Blur偏移数组
- void main()
- {
- vec4 vec4Sum = vec4(0.0);
- for(int i = 0; i < g_iWeightNumber; ++i)
- {
- vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryVerticalOffset[i])*g_aryWeight[i];
- }
- gl_FragColor = vec4Sum;
- }
- 纵向过滤:
- const int g_iWeightNumber = 17;
- uniform sampler2D g_FilterTexture; // 被过滤纹理
- uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
- uniform vec2 g_aryHorizontalOffset[g_iWeightNumber]; // 横向Blur偏移数组
- void main()
- {
- vec4 vec4Sum = vec4(0.0);
- for(int i = 0; i < g_iWeightNumber; ++i)
- {
- vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryHorizontalOffset[i])*g_aryWeight[i];
- }
- gl_FragColor = vec4Sum;
- }
- Mean过滤 - 用于纹理抗锯齿
- // Mean kernel
- // 1 1 1
- // 1 1 1
- // 1 1 1
- const int g_iWeightNumber = 9;
- uniform sampler2D g_FilterTexture; // 被过滤纹理
- uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
- uniform vec2 g_aryOffset[g_iWeightNumber]; // 横向Blur偏移数组
- void main()
- {
- vec4 vec4Sum = vec4(0.0);
- if (gl_TexCoord[0].s < 0.495)
- {
- for(int i = 0; i < g_iWeightNumber; ++i)
- {
- vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryOffset[i])*g_aryWeight[i];
- }
- }
- else if (gl_TexCoord[0].s > 0.505)
- {
- vec4Sum = texture2D(g_FilterTexture, gl_TexCoord[0].st);
- }
- else
- {
- vec4Sum = vec4(1.0, 0.0, 0.0, 1.0);
- }
- gl_FragColor = vec4Sum;
- }
- Laplacian过滤 - 用于突显图像轮廓
- // Edge detection kernel (Laplacian filter).
- // 0 -1 0
- // -1 4 -1
- // 0 -1 0
- const int g_iWeightNumber = 9;
- uniform sampler2D g_FilterTexture; // 被过滤纹理
- uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
- uniform vec2 g_aryOffset[g_iWeightNumber]; // 横向Blur偏移数组
- void main()
- {
- vec4 vec4Sum = vec4(0.0);
- if (gl_TexCoord[0].s < 0.495)
- {
- for(int i = 0; i < g_iWeightNumber; ++i)
- {
- vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryOffset[i])*g_aryWeight[i];
- }
- vec4 vec4BaseColor = texture2D(g_FilterTexture, gl_TexCoord[0].st);
- vec4Sum += vec4BaseColor*0.1;
- }
- else if (gl_TexCoord[0].s > 0.505)
- {
- vec4Sum = texture2D(g_FilterTexture, gl_TexCoord[0].st);
- }
- else
- {
- vec4Sum = vec4(1.0, 0.0, 0.0, 1.0);
- }
- gl_FragColor = vec4Sum;
- }
- Emboss过滤 - used to simulate the relief of an image
- // Emboss filter
- // 2 0 0
- // 0 -1 0
- // 0 0 -1
- const int g_iWeightNumber = 9;
- uniform sampler2D g_FilterTexture; // 被过滤纹理
- uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
- uniform vec2 g_aryOffset[g_iWeightNumber]; // 横向Blur偏移数组
- void main()
- {
- vec4 vec4Sum = vec4(0.0);
- if (gl_TexCoord[0].s < 0.495)
- {
- for(int i = 0; i < g_iWeightNumber; ++i)
- {
- vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryOffset[i])*g_aryWeight[i];
- }
- vec4Sum += 0.5;
- }
- else if (gl_TexCoord[0].s > 0.505)
- {
- vec4Sum = texture2D(g_FilterTexture, gl_TexCoord[0].st);
- }
- else
- {
- vec4Sum = vec4(1.0, 0.0, 0.0, 1.0);
- }
- gl_FragColor = vec4Sum;
- }
- Sharpness过滤 - 突显图像的细节
- // Sharpness filter
- // -1 -1 -1
- // -1 9 -1
- // -1 -1 -1
- const int g_iWeightNumber = 9;
- uniform sampler2D g_FilterTexture; // 被过滤纹理
- uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
- uniform vec2 g_aryOffset[g_iWeightNumber]; // 横向Blur偏移数组
- void main()
- {
- vec4 vec4Sum = vec4(0.0);
- if (gl_TexCoord[0].s < 0.495)
- {
- for(int i = 0; i < g_iWeightNumber; ++i)
- {
- vec4Sum += texture2D(g_FilterTexture, gl_TexCoord[0].st + g_aryOffset[i])*g_aryWeight[i];
- }
- }
- else if (gl_TexCoord[0].s > 0.505)
- {
- vec4Sum = texture2D(g_FilterTexture, gl_TexCoord[0].st);
- }
- else
- {
- vec4Sum = vec4(1.0, 0.0, 0.0, 1.0);
- }
- gl_FragColor = vec4Sum;
- }
- Demo效果截图:
- exe文件:http://www.fileupyours.com/view/219112/GLSL/Image%20Filter%20Demo.rar
GLSL实现Image Filter 【转】的更多相关文章
- mipmap一
讲一下mipmap 生成的时候 指定texture 的mipmaplevel 8 然后memory自动就会那么大的 画的时候要在lineraspace(因为我是gpucopy所以不涉及这个问题 可能) ...
- django 操作数据库--orm(object relation mapping)---models
思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...
- GLSL实现Glow效果 [转]
http://blog.csdn.net/a3070173/archive/2008/11/04/3220940.aspx Glow即辉光效果现在已成为3D图形中一个引人注目的特效.本文主要介绍如何使 ...
- GLSL/C++ 实现滤镜效果
入门效果之浮雕 "浮雕"图象效果是指图像的前景前向凸出背景.常见于一些纪念碑的雕刻上.要实现浮雕事实上很easy.我们把图象的一个象素和左上方的象素进行求差运算.并加上一个灰度.这 ...
- GLSL实现Glow效果 【转】
http://blog.csdn.net/a3070173/article/details/3220940 Glow即辉光效果现在已成为3D图形中一个引人注目的特效.本文主要介绍如何使用GLSL实现一 ...
- JavaWeb——Filter
一.基本概念 之前我们用一篇博文介绍了Servlet相关的知识,有了那篇博文的知识积淀,今天我们学习Filter将会非常轻松,因为Filter有很多地方和Servlet类似,下面在讲Filter的时候 ...
- 使用Visual Studio SDK制作GLSL词法着色插件
使用Visual Studio SDK制作GLSL词法着色插件 我们在Visual Studio上开发OpenGL ES项目时,避免不了写Shader.这时在vs里直接编辑shader就会显得很方便. ...
- 以bank account 数据为例,认识elasticsearch query 和 filter
Elasticsearch 查询语言(Query DSL)认识(一) 一.基本认识 查询子句的行为取决于 query context filter context 也就是执行的是查询(query)还是 ...
- AngularJS过滤器filter-保留小数,小数点-$filter
AngularJS 保留小数 默认是保留3位 固定的套路是 {{deom | number:4}} 意思就是保留小数点 的后四位 在渲染页面的时候 加入这儿个代码 用来精确浮点数,指定小数点 ...
随机推荐
- Solaris系统管理(二)资源管理与网络配置
上一篇主要总结了Solaris安装后需要进行的一些设置,如ssh,pkgutil管理依赖,vim安装. 这一篇将会对Solaris资源管理与网络配置进行总结. 四 Solaris 系统管理 1,查询总 ...
- 浅谈jquery选择器
首先来说说jquery选择器的优势: 1.简洁的写法 2.支持css1.0到3.0选择器 3.完善的处理机制. 再来说说分类: jquery选择器分为基本选择器.层次选择器.属性选择器.基本过滤选择 ...
- MVC&&MVP
Classic MVC Classic MVC 大概上世纪七十年代,Xerox PARC的Trygve提出了MVC的概念. 并应用在Smalltalk系统中,为了和其它类型的MVC加以区分,历史上习惯 ...
- 搭建sql注入实验环境(基于windows)
搭建服务器环境 1.下载xampp包 地址:http://www.apachefriends.org/zh_cn/xampp.html 很多人觉得安装服务器是件不容易的事,特别是要想添加MySql, ...
- Java实现中文字符串的排序功能
package test; /** * * @Title 书的信息类 * @author LR * @version 1.0 * @since 2016-04-21 */ public class B ...
- 桶排序-C-结构体排序
struct TS { int index; ]; }; ] = {{,,,,,"s8"}}; ]; int i; int length = sizeof(a) / sizeof ...
- android 开发必用的开源库
LogReport: https://github.com/wenmingvs/LogReport, 崩溃日志上传框架 wcl-permission-demo:Android 6.0 - 动态权 ...
- 【OpenOffice+swftools】在线预览环境的搭建和xpdf中文包的配置
[环境参数] Host:Win7 64bit VMware:VMware Workstation11.1.0 Client OS:CentOS release 6.5 (Final) 2.6.32-4 ...
- tomcat 粗略笔记
GlobalNamingResources 存在于server.xml中,定义全局公共数据源,如果host中有大量引用相同的数据源,那么可以都配在这里 <GlobalNamingResource ...
- POJ1338Ugly Numbers(DP)
http://poj.org/problem?id=1338 第一反应就是DP,DP[i] = min{2*DP[j], 3*DP[k], 5*DP[p] j,k,p<i};于是枚举一下0-i- ...