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水波纹效果相关推荐

  1. android水波效果,android动态壁纸中的水波纹效果

    [实例简介] android动态壁纸中的水波纹效果,采用opengl中的shader实现 [实例截图] [核心代码] @Override public String getVertexShader() ...

  2. android自定义水波纹,Android自定义View——实现水波纹效果类似剩余流量球(示例代码)...

    最近突然手痒就想搞个贝塞尔曲线做个水波纹效果玩玩,终于功夫不负有心人最后实现了想要的效果,一起来看下吧: 效果图镇楼 一:先一步一步来分解一下实现的过程 需要绘制一个正弦曲线(sin)或者余弦曲线(c ...

  3. 水波纹效果,附工程源码

    2019独角兽企业重金招聘Python工程师标准>>> 实现的一个水波纹效果,附工程代码. 这个可以用任意图片响应触屏事件显示波纹效果. 很多方面都能用得上,比如动态桌面,游戏,水族 ...

  4. html按钮按下效果_【CSS小分享】纯CSS实现一个水波纹效果按钮

    前言 如果大家有用过Material Design风格的UI库,那么一定对水波纹按钮很熟悉,我们这次就是使用纯CSS实现一个最简单的水波纹效果按钮,先上成品: 原理 在按钮中放置一个默认隐藏径向渐变的 ...

  5. html5 水波式按钮_css3+jQuery实现按钮水波纹效果

    水波纹按钮 /*自定义按钮样式*/ .btns{ height: 30px; line-height: 30px; text-align: center; width: 200px; color: # ...

  6. android 立体 流量球,Android自定义View——实现水波纹效果类似剩余流量球

    Android自定义View--实现水波纹效果类似剩余流量球 三个点   pre   ber   block   span   初始化   move   理解最近突然手痒就想搞个贝塞尔曲线做个水波纹效 ...

  7. Android 之自定义view实现水波纹效果

    在实际的开发中,很多时候还会遇到相对比较复杂的需求,比如产品妹纸或UI妹纸在哪看了个让人兴奋的效果,兴致高昂的来找你,看了之后目的很明确,当然就是希望你能给她: 在这样的关键时候,身子板就一定得硬了, ...

  8. C语言项目:水波纹效果实现

    今天教大家一个比较简单的C语言程序,通过用easyx库实现的水波纹效果.说到这里可能大家对水波纹似懂非懂,那么你肯定玩过这游戏吧! 编辑 打水漂 我们捡一块扁平的小石头或者瓦片,角度稍微倾斜的甩出去, ...

  9. 自定义view实现水波纹效果

    水波纹效果: 1.标准正余弦水波纹: 2.非标准圆形液柱水波纹: 虽说都是水波纹,但两者在实现上差异是比较大的,一个通过正余弦函数模拟水波纹效果,另外一个会运用到图像的混合模式(PorterDuffX ...

最新文章

  1. UVA11624 Fire!
  2. SpringCloudGateway起步
  3. 互联网日报 | 美团市值突破万亿港元;北京恢复二级响应;滴滴货运23日上线;微信开放MCN入驻...
  4. java引用类型_Java引用类型
  5. GitHub For Beginners: Don’t Get Scared, Get Started
  6. 有奖征文 | 蒋涛邀你悦评《UNIX传奇》新书,赢技术进阶好礼
  7. MATLAB打开USB摄像头的操作以及常见问题
  8. IDEA 配置Java环境
  9. 记账系统(java)
  10. windows 下 c++ 二维码生成库
  11. 基于SpringBoot-上传照片保存到本地,且回显照片
  12. 【嵌入式系统开发12】在stm32F103C8T6环境下,用HAL库,采用中断模式编程,控制LED的高亮与熄灭
  13. oralce常见异常——ORA-12514: TNS:listener does not currently know of service requested in connect descript
  14. 客官,来看看AspNetCore的身份验证吧
  15. SafetyNet 漏洞rootutils 利用
  16. 西安交通大学护理学计算机考试,西安交通大学护理专业怎么样
  17. 【免费】捷微微信管家公众号运营培训开课啦!
  18. Google map获取手机屏幕当前显示地图的范围
  19. PV操作与前趋图题型
  20. Google Maps 基础

热门文章

  1. NYOJ 201 作业题
  2. NYOJ 614 纸牌游戏
  3. Golang之gjson
  4. 【转】.NET内存管理、垃圾回收
  5. .Net高并发解决思路(转)
  6. bzoj2049 [Sdoi2008]Cave 洞穴勘测
  7. python生成随机密码
  8. 排序算法-- 大总结
  9. golang错误处理(实验楼)
  10. java实现随机验证码的图片