一种显示2d波浪动画的片元着色器代码

#version 300 es
precision highp float;
uniform sampler2D sTexture;//纹理输入
uniform int funChoice;
uniform float frame;//第几帧
uniform vec2 resolution;//分辨率
in vec4 fragObjectColor;//接收vertShader处理后的颜色值给片元程序
in vec2 fragVTexCoord;//接收vertShader处理后的纹理内坐标给片元程序
out vec4 fragColor;//输出到的片元颜色

void main() {
    float target = (sin(frame / 10.0 + fragVTexCoord.s * resolution.x / 200.0) + 1.0) / 8.0;
    if (fragVTexCoord.t < target) {
        fragColor = vec4(0.5, 0.5, 1.0, 1.0 - 2.0 * distance(fragVTexCoord, vec2(fragVTexCoord.s, target)));
    }
}

vTexcoord是纹理坐标st,从(0,0)~(1,1)的st坐标中,通过sin函数,以渲染帧计数/10为相位,以纹理实际分辨率的宽度×当前处理纹理的s坐标 / 200为频率,筛选出y值小于于target值的st坐标,赋予浅蓝色。透明度设定为距离目标sin线越远越浅。这样即可完成一个漂亮的2d活动水波纹纹理效果:

看了一下上传视频竟然还要去其他网站先上传,我懒得弄了,CSDN可真挫。截个图算了:

当然,也可以自由组合各种不同的参数,例如不同的频率等形成更复杂的特效:

#version 300 es
precision highp float;
uniform sampler2D sTexture;//纹理输入
uniform int funChoice;
uniform float frame;//第几帧
uniform vec2 resolution;//分辨率
in vec4 fragObjectColor;//接收vertShader处理后的颜色值给片元程序
in vec2 fragVTexCoord;//接收vertShader处理后的纹理内坐标给片元程序
out vec4 fragColor;//输出到的片元颜色

void main() {
    float target = (sin(frame / 10.0 + fragVTexCoord.s * resolution.x / 200.0) + 1.0) / 8.0;
    if (fragVTexCoord.t < target) {
        fragColor = vec4(0.5, 0.5, 1.0, 1.0 - 2.0 * distance(fragVTexCoord, vec2(fragVTexCoord.s, target)));
    }
    target = (sin(frame / 10.0 + fragVTexCoord.s * resolution.x / 100.0) + 1.0) / 16.0;
    if (fragVTexCoord.t < target) {
        vec4 newColor = vec4(0.8, 0.8, 1.0, 1.0 - 2.0 * distance(fragVTexCoord, vec2(fragVTexCoord.s, target)));
        fragColor = fragColor * newColor;
    }
}

把两段不同频率和振幅的波形得到的片元颜色相成,效果如图:

 

这样的动画制作方式对比使用安卓自带的canvas + surfaceview + path + paint组合拳要自由得多,效果基本上想做么做都行。而且这类型frag特效无需CPU参与任何运算,所有运算由GPU直接完成,效率也会高得多,算是对fragShader的一种妙用吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值