glsl shader简明教程系列1
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的更多相关文章
- SQL简明教程系列15 创建索引
CREATE INDEX用于在表中创建索引. 索引使数据库应用程序可以更快地查找数据. 注:更新一个包含索引的表比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新.因此,理想的做法是仅仅在常 ...
- 2013 duilib入门简明教程 -- 总结 (20)
duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第个版本,时间是2013.08.15~ 这里给出Alberl最后汇总的一个工程,戳我下载,效 ...
- Java8简明教程(转载)
ImportNew注:有兴趣第一时间学习Java 8的Java开发者,欢迎围观<征集参与Java 8原创系列文章作者>. 以下是<Java 8简明教程>的正文. “Java并没 ...
- CSDN Markdown简明教程5-高速上手
0.文件夹 文件夹 前言 CSDN Markdown特点 CSDN Markdown高速上手 1 使用快捷键 粗体斜体 引用 链接 高亮代码块 图片 标题 列表 切割线 撤销反复 2 使用离线写作 3 ...
- CSDN Markdown简明教程3-表格和公式
0. 文件夹 文件夹 前言 表格 1 表格 2 表格对齐方式 公式 1 行内公式 2 陈列公式displayed formulas 3 MathJax语法 深入 声明 1. 前言 Markdown是一 ...
- CSDN Markdown简明教程4-UML画画
0.文件夹 文件夹 前言 序列图 1 序列图演示样例 2 序列图语法 流程图 1 流程图演示样例 2 流程图语法 节点定义 节点连接 Gravizo 声明 1. 前言 Markdown是一种轻量级的标 ...
- ArcGIS Pro 简明教程(4)工具和模型构建器
ArcGIS Pro 简明教程(4)工具和模型构建器 by 李远祥 工具箱中的工具 ArcGIS Pro 在1.3版本基本上已经继承了ArcMap的所有工具,而且会不断加入一些它自身才有的工具,例如适 ...
- ArcGIS Pro 简明教程(1)Pro简介
ArcGIS Pro 简明教程(1)Pro简介 ArcGIS Pro已经发布了相当的一段时间了,截至笔者写这系列文章的时候已经是1.3版本了,已经是相当完善的一个版本,基本上已经完成了原来ArcGIS ...
- CGIC简明教程(转摘)
CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库“CGIC”完成Web开发的各种要求. ********************************* 基础知识 1 ...
随机推荐
- SpringCloud教程二:Ribbon(Finchley版)
在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...
- Debian更新源加安装Metespolit&&Cobalt Strike
首先更新下源 修改/etc/apt/sources.list文件 再apt-get update deb http://mirrors..com/debian/ stretch main non-fr ...
- [NOIp2011] luogu P1313 计算系数
继续水博客,待会回去上术学. 题目描述 给定一个多项式 (by+ax)k(by+ax)^k(by+ax)k ,请求出多项式展开后 xn×ymx^n \times y^mxn×ym 项的系数. Solu ...
- Cocos2d-x 学习笔记(13) ActionEase
ActionEase是ActionInterval的子类,能够变速执行动作.把内部动作进行了包装,通过传进update的time,加上不同的计算公式,算出新的time,作为内部动作的time,实现了内 ...
- python中requests模块-params与data的区别
一般来说,params 在 get 请求中使用,data 在 post 请求中使用
- 19.Tomcat集群架构
1.Nginx+Tomcat集群架构介绍 2.Nginx+Tomcat集群架构实战 [root@lb01 conf.d]# cat proxy_zrlog.cheng.com.conf upstrea ...
- 原来热加载如此简单,手动写一个 Java 热加载吧
1. 什么是热加载 热加载是指可以在不重启服务的情况下让更改的代码生效,热加载可以显著的提升开发以及调试的效率,它是基于 Java 的类加载器实现的,但是由于热加载的不安全性,一般不会用于正式的生产环 ...
- MyBatis 示例-缓存
MyBatis 提供两种类型的缓存,一种是一级缓存,另一种是二级缓存,本章通过例子的形式描述 MyBatis 缓存的使用. 测试类:com.yjw.demo.CacheTest 一级缓存 MyBati ...
- git jenkins 基本部署之git远程仓库
1.git远程仓库如何使用? 实战一.如何将本地仓库与远程Gitee进行关联? 1.注册gitee 2.创建一个远程仓库? 3.配置使用远程仓库 ...
- 03 python学习笔记-文件操作(三)
本文内容主要包括以下方面: 1. 文件操作基本认识2. 只读(r, rb)3. 只写(w, wb)4. 追加(a, ab)5. r+读写6. w+写读7. a+写读(追加写读)8. 文件的修改 一.文 ...