首页 > Web开发 > 详细

pixijs shader 实现图片波浪效果

时间:2019-11-20 12:42:25      阅读:520      评论:0      收藏:0      [点我收藏+]
  const app = new PIXI.Application({ transparent: true });
        document.body.appendChild(app.view);

        // Create background image
        const background = PIXI.Sprite.from(/moban/bg_grass.jpg);
        background.width = app.screen.width;
        background.height = app.screen.height;
        app.stage.addChild(background);

        // Stop application wait for load to finish
        app.stop();

        app.loader.add(shader, /moban/shader.frag)
            .load(onLoaded);

        let filter;

        // Handle the load completed
        function onLoaded(loader, res) {
            // Create the new filter, arguments: (vertexShader, framentSource)
            filter = new PIXI.Filter(null, res.shader.data, {
                customUniform: 0.0,
            });

            // === WARNING ===
            // specify uniforms in filter constructor
            // or set them BEFORE first use
            // filter.uniforms.customUniform = 0.0

            // Add the filter
            background.filters = [filter];

            // Resume application update
            app.start();
        }
         var i=0;
        // Animate the filter
        app.ticker.add((delta) => {
            i+=0.03;
           
            filter.uniforms.customUniform = i;
        });
precision mediump float;

varying vec2 vTextureCoord;
varying vec4 vColor;

uniform sampler2D uSampler;
uniform float customUniform;

const float speed = 0.2;                      
const float frequency = 8.0;   

vec2 shift( vec2 p ) {                        
   float x = frequency * (p.x + customUniform*speed);
   float y = frequency * (p.y + customUniform*speed);
   vec2 q = cos( vec2(                        
       cos(x-y)*cos(y),                       
       sin(x+y)*sin(y) ) );                   
   return q;                                  
}        
void main(void)
{

  vec2 r = vTextureCoord;                      
    vec2 p = shift( r );             
    r += 1.0;                                 
    vec2 q = shift(r);  
//改600.0改小可以增大效果
float amplitude = 2.0 / 600.0; vec2 s = vTextureCoord + amplitude * (p - q); s.y = 1. - s.y; // flip Y axis for ShaderToy gl_FragColor = texture2D( uSampler, s ); }

 

pixijs shader 实现图片波浪效果

原文:https://www.cnblogs.com/newmiracle/p/11896117.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!