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 ...
随机推荐
- apply、bind、call方法的作用与区别
js中call.apply.bind方法的作用和区别 1. call方法 作用:专门用于修改方法内部的 this 指向 格式:xxx.call( 对象名, 参数1, 参数2 , ...);.即:将 x ...
- taro taroUi的H5打包后路径/修改为./
打包文件路径修改在config/index.tsx中,如下 esnextModules: ['taro-ui'],配置也需要在h5中写入并且将publicPath: './'即可,不需要在做一个h ...
- Java8新特性之Lambda
为什么要Lambda Java8应该是目前最大的一次更新了,更新后我们迎来了很多新特性,其中便包括Lambda表达式,函数式编程的思想正式进入Java,让我们看一个经典案例. 例1 按照两个人的年龄排 ...
- 两分钟让你明白Go中如何继承
最近在重构代码的时候,抽象了大量的接口.也使用这些抽象的接口做了很多伪继承的操作,极大的减少了代码冗余,同时也增加了代码的可读性. 然后随便搜了一下关于Go继承的文章,发现有的文章的代码量过多,并且代 ...
- OsmocomBB软件实现栈概况
OsmocomBB软件实现栈概况 简单地说,本文仅描述软件中GSM信号接收到部分. 暂不提及发送流程,引导加载/引导流程,以及各种控制路径特别是从layer1到RF硬件. 首先,通过天线接收RF信号, ...
- selenium学习-拖拽页面元素
一.ActionChains包 模拟鼠标的操作要首先引入ActionChains的包 from selenium.webdriver.common.action_chains import Actio ...
- Java基础(二)数据类型
数据类型主要分为基本类型和引用类型两大类. 一.基本类型 1.基本类型又分为数值类型和boolean类型, (1)数值类型包括浮点数类型.整数类型和字符类型 整型 ...
- SpringBoot与MybatisPlus3.X整合之字段类型处理器(八)
pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...
- 构建企业级数据湖?Azure Data Lake Storage Gen2实战体验(下)
相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 作为微软Azure上最新 ...
- Mycat分布式数据库架构解决方案--Linux安装运行Mycat
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! Myc ...