glsl shader简明教程系列1

底层的东西我就不说了(自己去百度翻基础教程)  我直接说上层了(片段着色器)

web编辑器还在开发中 有了编辑器 到时候可以把代码复制上去可以看到效果了

1  实现图片变灰(需要注意 shader是强类型语言 注意类型一致)

void main () {
// 这个变量c就是图片每个像素的 颜色值
vec4 c = vec4(,,,) * texture2D(texture, uv0); //下面是变灰算法 只要明白这个算法能变灰就行
float clrbright = (c.r + c.g + c.b) * (. / .);
float gray = (0.6) * clrbright; //给图片每个像素重新赋值颜色值
gl_FragColor = vec4(gray, gray, gray, c.a);
}

2 图片变亮效果

  vec4 dim(vec4 col, float factor) {
return vec4(col.r * factor, col.g * factor, col.b * factor, col.a);
} void main () {
// 这个变量c就是图片每个像素的 颜色值
vec4 c = vec4(,,,) * texture2D(texture, uv0);
// 提高亮度(dim第二个参数 设置1以上提高亮度 1以下降低亮度 这些都是颜色算法 不用深究明白有什么作用就行
vec4 blurred_image = dim(c,1.6);
//给图片每个像素重新赋值颜色值
gl_FragColor = vec4(blurred_image); }

3 图片变模糊

 #define repeats 5.
#define num 0.02
// 随机值
float rand(vec2 co){
return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
// 应用贴图UV
vec4 draw(vec2 uv) {
return texture2D(texture,uv).rgba;
} void main () {
// 模糊贴图(下面都是模糊算法 不用细看 直接搬过来用就行)
vec4 blurred_image = vec4(.);
// 重复采样
for (float i = .; i < repeats; i++) {
// 第一采样点
vec2 q = vec2(cos(degrees((i/repeats)*.)),sin(degrees((i/repeats)*.))) * (rand(vec2(i,uv0.x+uv0.y))+num);
vec2 uv2 = uv0+(q*num);
blurred_image += draw(uv2)/.; // 第二采样点
q = vec2(cos(degrees((i/repeats)*.)),sin(degrees((i/repeats)*.))) * (rand(vec2(i+.,uv0.x+uv0.y+.))+num);
uv2 = uv0+(q*num);
blurred_image += draw(uv2)/.;
}
// 中和
blurred_image /= repeats;
// 给图片每个像素重新赋值颜色值
gl_FragColor = vec4(blurred_image); }

接下来说下圆形mask做法

vec4 drawCircle() {
float dis = 0.0;
//uv 代表贴图的uv坐标 默认左下角为00点
vec2 uv = uv0; //
dis = distance( uv, vec2(0.5, 0.5) ); vec4 color;
// 这个变量c就是图片每个像素的 颜色值
vec4 c = vec4(,,,)* texture2D(texture,uv);
//判断如果是半径内 就显示 半径外 就隐藏
if(dis <= 0.5)
{
color = c;
}
else{
// 隐藏不要的部分
color = vec4(c.rgb,.);
} return color;
} void main () {
vec4 color = drawCircle();
gl_FragColor = color;
}

如果边缘要弄羽化效果 那就在边缘加点0到1 的透明度过度

smoothstep(a, b, x) 可以用来生成0到1的平滑过渡.

如果x小于a,返回 0。

如果x大于b,返回 1。

如果a<x<b  返回0~1

glsl shader简明教程系列1的更多相关文章

  1. SQL简明教程系列15 创建索引

    CREATE INDEX用于在表中创建索引. 索引使数据库应用程序可以更快地查找数据. 注:更新一个包含索引的表比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新.因此,理想的做法是仅仅在常 ...

  2. 2013 duilib入门简明教程 -- 总结 (20)

        duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第个版本,时间是2013.08.15~       这里给出Alberl最后汇总的一个工程,戳我下载,效 ...

  3. Java8简明教程(转载)

    ImportNew注:有兴趣第一时间学习Java 8的Java开发者,欢迎围观<征集参与Java 8原创系列文章作者>. 以下是<Java 8简明教程>的正文. “Java并没 ...

  4. CSDN Markdown简明教程5-高速上手

    0.文件夹 文件夹 前言 CSDN Markdown特点 CSDN Markdown高速上手 1 使用快捷键 粗体斜体 引用 链接 高亮代码块 图片 标题 列表 切割线 撤销反复 2 使用离线写作 3 ...

  5. CSDN Markdown简明教程3-表格和公式

    0. 文件夹 文件夹 前言 表格 1 表格 2 表格对齐方式 公式 1 行内公式 2 陈列公式displayed formulas 3 MathJax语法 深入 声明 1. 前言 Markdown是一 ...

  6. CSDN Markdown简明教程4-UML画画

    0.文件夹 文件夹 前言 序列图 1 序列图演示样例 2 序列图语法 流程图 1 流程图演示样例 2 流程图语法 节点定义 节点连接 Gravizo 声明 1. 前言 Markdown是一种轻量级的标 ...

  7. ArcGIS Pro 简明教程(4)工具和模型构建器

    ArcGIS Pro 简明教程(4)工具和模型构建器 by 李远祥 工具箱中的工具 ArcGIS Pro 在1.3版本基本上已经继承了ArcMap的所有工具,而且会不断加入一些它自身才有的工具,例如适 ...

  8. ArcGIS Pro 简明教程(1)Pro简介

    ArcGIS Pro 简明教程(1)Pro简介 ArcGIS Pro已经发布了相当的一段时间了,截至笔者写这系列文章的时候已经是1.3版本了,已经是相当完善的一个版本,基本上已经完成了原来ArcGIS ...

  9. CGIC简明教程(转摘)

    CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库“CGIC”完成Web开发的各种要求. *********************************     基础知识       1 ...

随机推荐

  1. 客户端 SOCKET 编程

    建立客户端的 Socket: 客户端应用程序首先也是调用 WSAStartup() 函数来初始化 Winsock 的动态连接库,然后同样 调用 socket() 来建立一个 TCP 或 UDP Soc ...

  2. Hydra爆破神器使用

    参数详解: -R 根据上一次进度继续破解-S 使用SSL协议连接-s 指定端口-l 指定用户名-L 指定用户名字典(文件)-p 指定密码破解-P 指定密码字典(文件)-e 空密码探测和指定用户密码探测 ...

  3. amoeba-mysql

    配置完成后无法连接 Could not create a validated object, cause: ValidateObject failed 查看logs/下面的 messageHandle ...

  4. 百万年薪python之路 -- MySQL数据库之 永久修改字符串编码 与 忘了密码和修改密码

    永久修改字符集编码的方法: 在mysql安装目录下创建一个my.ini(Windows下)文件,写入下面的配置,然后重启服务端. [client] #设置mysql客户端默认字符集 default-c ...

  5. 小白学 Python(9):基础数据结构(列表)(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  6. 【redis】redis的过期策略

    redis过期策略 在使用redis做缓存的时候,我们常常会设置过期时间.那么redis是如何清理这些过期的数据呢? 答案是: 定期删除 + 惰性删除 定期删除: redis每100ms就会随机抽查删 ...

  7. Token refresh的实现

    实现原理: 在access_token里加入refresh_token标识,给access_token设置短时间的期限(例如一天),给refresh_token设置长时间的期限(例如七天).当活动用户 ...

  8. 一分钟带你了解JWT认证!

    目录 一.JWT简介 二.JWT认证和session认证的区别 三.JWT认证流程 四.JWT组成 五.JWT使用场景 一.JWT简介 JSON Web Token(JWT)是一个开放的标准(RFC ...

  9. mha格式的CT体数据转为jpg切片

    mha格式的CT体数据转为jpg切片 mha格式 .mha文件是一种体数据的存储格式,由一个描述数据的头和数据组成,一般我们拿到的原始医学影像的数据是.dcm也就是dicom文件,dicom文件很复杂 ...

  10. 解决靶机Bee-Box 键盘乱序问题

    Bee-Box介绍 Bee-box官方称呼BWAPP,buggy web Application 这是一个集成了各种常见漏洞和最新漏洞的开源Web应用程序,目的是帮助网络安全爱好者.开发人员和学生发现 ...