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安全错误
数据库的锁怎样保障安全
2008r2收缩数据库
收件箱服务器
异构平台软件开发技术
ns领金币 服务器
单线程需要数据库连接池
创宇服务器
红包软件开发
夸克会员苹果服务器暂时
软件开发 建模书籍
access数据库绿色版
关系型数据库就被丢弃了
尼尔森 软件开发经理
济南85软件开发
网警网络安全宣传方案
文件管理打开是云服务器
数据库sql无法结束
网络技术专业课考试2021
软件开发有没有出口
软件开发服务公司 聚顶科技好
广东警官学校网络安全与执法
网络安全与执法收入
知网查重的数据库只有知网嘛
浙江软件开发哪个公司好
无线网络技术题库苏州大学
奥丁神叛 台服 服务器忙
数据库p_id
计算机网络技术专业主要困难
web软件开发工程师笔试
ice服务器被炸后的场景
大学生网络安全受骗