OpenGL水波纹效果
OpenGL水波纹效果
glsl水波纹效果,可使用shadertoy直接运行。sin和iTime配合得到水波纹mask,通过mask流动变化得到水波纹效果。
脚本1
#iChannel0 "file://./bg0.jpg"// 水波纹中心点
const vec2 center = vec2(0.5, 0.5);
// 水波纹速度
const float speed = 2.5;
// 水波纹强度
const float intensity = 36.0;void mainImage(out vec4 fragColor, in vec2 fragCoord) {// 计算uvvec2 uv = fragCoord.xy / iResolution.xy;// 计算center到各个uv的值float dst = distance(uv, center);// fragColor = vec4(vec3(dst), 1.0);// 计算水波纹// sin将对这个范围限制到[-1, 1]// dst范围是[0, sqrt(2)]// intensity可以理解为波纹数// iTime的引入让一个点可以从[-1, 1]的变化// speed是速度// 可以理解为dst*intensity是初始波纹, iTime的引入让波纹动了起来float wave = sin(sqrt(dst)*intensity-iTime*speed);// fragColor = vec4(vec3(wave), 1.0);// 接下来使用da和偏移的db来mix, 也就是水波纹白色区域取db, 黑色区域取davec3 da = texture2D(iChannel0, uv).rgb;vec3 db = texture2D(iChannel0, uv-vec2(0.01)).rgb;vec3 res = mix(da, db, wave*wave); // wave*wave范围为[0, 1]fragColor = vec4(res, 1.0);
}
脚本2
#iChannel1 "file://./bg0.jpg"
#iChannel2 "file://./mask.png"const float intensity = 0.02;
const float speed = 10.0;void mainImage(out vec4 fragColor, in vec2 fragCoord) {vec2 uv1 = fragCoord.xy / iResolution.xy;// mask的uv流动vec2 uv2 = uv1 + vec2(0.0, iTime * speed / 100.0);// 由于vs中不能对iChannel2进行repeat, 所以进行一个求余操作uv2 = mod(uv2, 1.0);// 得到mask的流动vec2 wave = texture2D(iChannel2, uv2).xy;// wave范围是[0, 1], intensity限制了范围, 错位得取像素uv1 = uv1 + wave*intensity;fragColor = texture(iChannel1, uv1);
}
脚本3
#iChannel0 "file://./bg0.jpg"const float speed = 1.0;
const float intensity = 6.0;float wave(vec2 pos, float t, float freq, float numWaves, vec2 center) {float d = length(pos - center);d = log(1.0 + exp(d));return 1.0/(1.0+20.0*d*d) * sin(2.0*3.1415*(-numWaves*d + t*freq));
}float height(vec2 pos, float t) {float w;w = wave(pos, t, speed, intensity, vec2(0.5, -0.5));w += wave(pos, t, speed, intensity, -vec2(0.5, -0.5));return w;
}vec2 normal(vec2 pos, float t) {return vec2(height(pos - vec2(0.01, 0), t) - height(pos, t), height(pos - vec2(0, 0.01), t) - height(pos, t));
}void mainImage(out vec4 fragColor, in vec2 fragCoord) {vec2 uv = fragCoord.xy / iResolution.xy;vec2 uvn = 2.0*uv - vec2(1.0); uv += normal(uvn, iTime);fragColor = texture2D(iChannel0, uv);
}
OpenGL水波纹效果相关推荐
- android水波效果,android动态壁纸中的水波纹效果
[实例简介] android动态壁纸中的水波纹效果,采用opengl中的shader实现 [实例截图] [核心代码] @Override public String getVertexShader() ...
- android自定义水波纹,Android自定义View——实现水波纹效果类似剩余流量球(示例代码)...
最近突然手痒就想搞个贝塞尔曲线做个水波纹效果玩玩,终于功夫不负有心人最后实现了想要的效果,一起来看下吧: 效果图镇楼 一:先一步一步来分解一下实现的过程 需要绘制一个正弦曲线(sin)或者余弦曲线(c ...
- 水波纹效果,附工程源码
2019独角兽企业重金招聘Python工程师标准>>> 实现的一个水波纹效果,附工程代码. 这个可以用任意图片响应触屏事件显示波纹效果. 很多方面都能用得上,比如动态桌面,游戏,水族 ...
- html按钮按下效果_【CSS小分享】纯CSS实现一个水波纹效果按钮
前言 如果大家有用过Material Design风格的UI库,那么一定对水波纹按钮很熟悉,我们这次就是使用纯CSS实现一个最简单的水波纹效果按钮,先上成品: 原理 在按钮中放置一个默认隐藏径向渐变的 ...
- html5 水波式按钮_css3+jQuery实现按钮水波纹效果
水波纹按钮 /*自定义按钮样式*/ .btns{ height: 30px; line-height: 30px; text-align: center; width: 200px; color: # ...
- android 立体 流量球,Android自定义View——实现水波纹效果类似剩余流量球
Android自定义View--实现水波纹效果类似剩余流量球 三个点 pre ber block span 初始化 move 理解最近突然手痒就想搞个贝塞尔曲线做个水波纹效 ...
- Android 之自定义view实现水波纹效果
在实际的开发中,很多时候还会遇到相对比较复杂的需求,比如产品妹纸或UI妹纸在哪看了个让人兴奋的效果,兴致高昂的来找你,看了之后目的很明确,当然就是希望你能给她: 在这样的关键时候,身子板就一定得硬了, ...
- C语言项目:水波纹效果实现
今天教大家一个比较简单的C语言程序,通过用easyx库实现的水波纹效果.说到这里可能大家对水波纹似懂非懂,那么你肯定玩过这游戏吧! 编辑 打水漂 我们捡一块扁平的小石头或者瓦片,角度稍微倾斜的甩出去, ...
- 自定义view实现水波纹效果
水波纹效果: 1.标准正余弦水波纹: 2.非标准圆形液柱水波纹: 虽说都是水波纹,但两者在实现上差异是比较大的,一个通过正余弦函数模拟水波纹效果,另外一个会运用到图像的混合模式(PorterDuffX ...
最新文章
- UVA11624 Fire!
- SpringCloudGateway起步
- 互联网日报 | 美团市值突破万亿港元;北京恢复二级响应;滴滴货运23日上线;微信开放MCN入驻...
- java引用类型_Java引用类型
- GitHub For Beginners: Don’t Get Scared, Get Started
- 有奖征文 | 蒋涛邀你悦评《UNIX传奇》新书,赢技术进阶好礼
- MATLAB打开USB摄像头的操作以及常见问题
- IDEA 配置Java环境
- 记账系统(java)
- windows 下 c++ 二维码生成库
- 基于SpringBoot-上传照片保存到本地,且回显照片
- 【嵌入式系统开发12】在stm32F103C8T6环境下,用HAL库,采用中断模式编程,控制LED的高亮与熄灭
- oralce常见异常——ORA-12514: TNS:listener does not currently know of service requested in connect descript
- 客官,来看看AspNetCore的身份验证吧
- SafetyNet 漏洞rootutils 利用
- 西安交通大学护理学计算机考试,西安交通大学护理专业怎么样
- 【免费】捷微微信管家公众号运营培训开课啦!
- Google map获取手机屏幕当前显示地图的范围
- PV操作与前趋图题型
- Google Maps 基础