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. WPF写圆形头像,带消息提醒图标

    <DockPanel VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin=" ...

  2. XSS中的同源策略和跨域问题

    转自 https://www.cnblogs.com/chaoyuehedy/p/5556557.html 1 同源策略 所谓同源策略,指的是浏览器对不同源的脚本或者文本的访问方式进行的限制.比如源a ...

  3. Vue 全家桶,深入Vue 的世界

    内容简介: Vue 实例上的属性 Vue 生命周期 Vue 数据绑定 computed 计算属性 watch 监听器 Vue 组件 Vue 组件 extend Vue 组件高级属性 Vue 的rend ...

  4. Yroot of High-Precisions (luogu P2293 [HNOI2004]高精度开根)

    Background\text{Background}Background I've accepted\text{I've accepted}I've accepteda very good prob ...

  5. Python开发【第九篇】字典

    字典 字典是一种可变的容器,可以存储任意类型的数据 字典中的每个数据都是用键进行索引,而不像序列容器(str,list,tuole)可以用整数进行索引 字典中的数据没有先后顺序,字典的存储是无序的 字 ...

  6. PageObjec页面对象模式(理论)

    ui自动化测试的分层思想:实现测试数据与业务数据分离 1. 基础层 2. 对象层:每个页面的操作元素封装为一个文件 3.测试用例层:调用对象层封装的方法进行测试用例编写

  7. 2.Linux Bash认识

    虚拟机快照操作 1.什么是Bash shell? 它就是命令解释器,将用户输入的指令翻译给内核程序,内核处理完成之后将结果返回给Bash 2.Bash shell的用途? 几乎能完成所有的操作: 文件 ...

  8. Spring Cloud Alibaba (nacos 注册中心搭建)

    [nacos下载地址](https://github.com/alibaba/nacos/releases) ### 什么是 Nacos? - nacos主要起到俩个作用一个是注册中心,另外一个是配置 ...

  9. JAVA实现扫描线算法

    首先说一下,教科书上的扫描线算法确实是用c++很好实现,而且网上有很多源码,而java实现的基本没有(可能是我没看到),所以肖先生还是打算自己码(实验作业写这个而自己又个是写java的猿0.0). 对 ...

  10. 在Eclipse中开发MapReduce程序

    一.Eclipse的安装与设置 1.在Eclipse官网上下载eclipse-jee-oxygen-3a-linux-gtk-x86_64.tar.gz文件并将其拷贝到/home/jun/Resour ...