OpenGL Shader如何实现简单转场效果
发表于:2024-09-30 作者:千家信息网编辑
千家信息网最后更新 2024年09月30日,这篇文章主要介绍了OpenGL Shader如何实现简单转场效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。渐变转场通过mix函数混
千家信息网最后更新 2024年09月30日OpenGL Shader如何实现简单转场效果
这篇文章主要介绍了OpenGL Shader如何实现简单转场效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
渐变转场
通过mix
函数混合两个纹理图像,使用time
在[0,1]之间不停变化来控制第二个图片纹理混合的强弱变化从而实现渐变效果。
#define time iTimevoid main() { vec2 uv = gl_FragCoord.xy / iResolution.xy; vec4 texture1 = texture(iChannel1,uv); vec4 texture2 = texture(iChannel2,uv); float progress = abs(sin(time)); gl_FragColor = mix(texture1,texture2,progress);}
切换转场
切换动画和渐变动画同样是使用mix
函数来实现效果的。同时结合step
函数来判断当前的progress
值是否大于uv.x
来控制当前绘制纹理是第一个还是第二个从而实现纹理卷帘位移效果。这里是采用了mix
和step
两个函数相结合来实现动画效果,同样的采用if-else
也能够达到相同目的但是之前有提到过在glsl
中最好优先考虑使用内置函数来实现效果,减少使用if-else
判断语句。
x轴切换
#define time iTimevoid main() { vec2 uv = gl_FragCoord.xy / iResolution.xy; vec4 texture1 = texture(iChannel1,uv); vec4 texture2 = texture(iChannel2,uv); float progress = abs(sin(time)); gl_FragColor = mix(texture1,texture2,step(uv.x,progress));}
y轴切换
#define time iTimevoid main() { vec2 uv = gl_FragCoord.xy / iResolution.xy; vec4 texture1 = texture(iChannel1,uv); vec4 texture2 = texture(iChannel2,uv); float progress = abs(sin(time)); gl_FragColor = mix(texture1,texture2,step(uv.y,progress));}
对角线切换
对角线切换实现同样也是mix
和step
函数相结合,利用对角线对齐特性x-y=0
的特点,当progress
值到达0
则切换到第二个纹理图像。
#define time iTimevoid main() { vec2 uv = gl_FragCoord.xy / iResolution.xy; vec4 texture1 = texture(iChannel1,uv); vec4 texture2 = texture(iChannel2,uv); float progress = sin(time); gl_FragColor = mix(texture1,texture2,step(uv.x - uv.y, - progress));}
位移转场
切换转场效果是底部纹理位置不动,上层纹理做覆盖来实现的。位移转场是两个纹理对象不重叠,像是类似轮播图的效果,实现效果是同时向着一个方向移动。位移动画对整体纹理做偏移处理,通过progress
的值来分配第一个纹理和第二个纹理的占比。
x轴位移
#define time iTimevoid main() { vec2 uv = gl_FragCoord.xy / iResolution.xy; vec2 newUv = uv; float progress = abs(sin(time)); vec4 texture3; newUv.x -= progress; if(uv.x >= progress){ texture3 = texture(iChannel1,newUv); }else{ texture3 = texture(iChannel2,newUv); } gl_FragColor = texture3;}
y轴位移
#define time iTimevoid main() { vec2 uv = gl_FragCoord.xy / iResolution.xy; vec2 newUv = uv; float progress = abs(sin(time)); vec4 texture3; newUv.y -= progress; if(uv.y >= progress){ texture3 = texture(iChannel1,newUv); }else{ texture3 = texture(iChannel2,newUv); } gl_FragColor = texture3;}
感谢你能够认真阅读完这篇文章,希望小编分享的"OpenGL Shader如何实现简单转场效果"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
纹理
效果
切换
转场
函数
动画
篇文章
两个
同时
对角
对角线
图像
变化
控制
混合
相同
上层
之间
价值
位置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
王牌战争里怎么开服务器
魅族17实测数据库
河南会计软件开发资格
唐山联通泛华网络技术开发
远程服务器怎么看ip
有关计算机网络技术的网址
为什么es6模块化要在服务器中
网络安全模式是指什么
数据库表中如何保存附件
国家网络安全中心考试题库
进入服务器管理口
走麦城打一网络安全俗语
建立数据库考试祝福语
利他服务器
什么是服务器流量
mc自己的服务器ip
昆山创新软件开发售后服务
校园网络安全拓扑
软件开发工时费2000贵吗
网安大队开展网络安全检查
高青销售软件开发报价
华中科技大学互联网作品
苏州市软件开发平均工资
三级网络技术txt下载
如何构建医疗大数据库
太原电脑软件开发
CBM是()数据库
中国网络安全部队在哪里
瑶海区软件开发培训
联想7d4m服务器导轨安装