跟我一起学glsl编程24 - 图片扫描线

241 阅读1分钟

图片扫描线

同学们,go go go动起来,让我来实现这个效果,图片我们还使用前几讲使用过的图片

  • 示例代码一

看过前几讲的例子,这里很容易看明白

#ifdef GL_ES
precision mediump float;
#endif

uniform float u_time;
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform sampler2D u_tex0;

void main(){
    vec2 coord = gl_FragCoord.xy / u_resolution;
    vec3 color = vec3(0.0);

     vec4 image = texture2D(u_tex0, coord);

     image.a = sin(floor(coord.x * 3.0) - u_time * 9.0 );

    gl_FragColor = image;
}
  • 代码效果

  • 示例代码二

提取相关的参数,真正的程序中,你可以将这些变量通过uniform的方式传递给shader

#ifdef GL_ES
precision mediump float;
#endif

uniform float u_time;
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform sampler2D u_tex0;

float size = 6.0; // 一屏中的扫描线的数量
float speed = 10.0; // 扫描线的动画速度,如果是负数就会相反方向运动
bool flip = false; // 扫描线的运动是横向还是纵向进行

void main(){
    vec2 coord = gl_FragCoord.xy / u_resolution;
    vec3 color = vec3(0.0);

    
     vec4 image = texture2D(u_tex0, coord);
     if(flip){
        
        image.a = sin(floor(coord.x * size) - u_time * speed );
        
    } else {
     
     image.a = sin(floor(coord.y * size) - u_time * speed );
        
    }


    gl_FragColor = image;
}
  • 代码效果

通过这个小的示例,以后再做扫描线,你就不会那么恐慌了,go go go!

《跟我一起学glsl编程》期待你的关注与点赞