Newer
Older
pixi.js / examples / example 15 - Filters / indexDisplacement_2.html
<!DOCTYPE HTML>
<html>
<head>
    <title>pixi.js example 15 - Filters</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            background-color: #000000;
        }
    </style>
    
    <script src="../../bin/pixi.dev.js"></script>
    <script src="pixi.js"></script>
</head>
<body>
    <script>
    
    var renderer = PIXI.autoDetectRenderer(630, 410);
    renderer.view.style.position = "absolute"
    renderer.view.style.width = window.innerWidth + "px";
    renderer.view.style.height = window.innerHeight + "px";
    renderer.view.style.display = "block";
    
    // add render view to DOM
    document.body.appendChild(renderer.view);

    // create an new instance of a pixi stage
    var stage = new PIXI.Stage(0xFFFFFF, true);
    
    var pondContainer = new PIXI.DisplayObjectContainer();
    stage.addChild(pondContainer);

    stage.interactive = true;
    
    var bg = PIXI.Sprite.fromImage("displacement_BG.jpg");
    pondContainer.addChild(bg);

    //var fish = PIXI.Sprite.fromImage("displacement_fish2.jpg");//
    //littleDudes.position.y = 100;
    var padding = 100;
    var bounds = new PIXI.Rectangle(-padding, -padding, 630 + padding * 2, 410 + padding * 2)
    var fishs = [];


    for (var i = 0; i < 20; i++) 
    {
        var fishId = i % 4;
        fishId += 1;

        //console.log("displacement_fish"+fishId+".png")
        var fish =  PIXI.Sprite.fromImage("displacement_fish"+fishId+".png");
        fish.anchor.x = fish.anchor.y = 0.5;
        pondContainer.addChild(fish);

        //var direction 
        //var speed = 
        fish.direction = Math.random() * Math.PI * 2;
        fish.speed = 2 + Math.random() * 2;
        fish.turnSpeed = Math.random() - 0.8;

        fish.position.x = Math.random() * bounds.width;
        fish.position.y = Math.random() * bounds.height;
        //fish.speed = new PIXI.Point(0,0)

        fish.scale.x = fish.scale.y = 0.8 + Math.random() * 0.3;
        fishs.push(fish);

    };
    
    var overlay = new PIXI.TilingSprite(PIXI.Texture.fromImage("zeldaWaves.png"), 630, 410);
    overlay.alpha = 0.2
    pondContainer.addChild(overlay);


    var displacementTexture = PIXI.Texture.fromImage("displacement_map.jpg");
    var displacementFilter = new PIXI.DisplacementFilter(displacementTexture);

    var pixelFilter = new PIXI.PixelateFilter();
    pixelFilter.size.x = pixelFilter.size.y = 3;
    pondContainer.filters = [displacementFilter, pixelFilter];

    

    displacementFilter.scale.x = 50;
    displacementFilter.scale.y = 50;

    

    
    
    
    
    var count = 0;
    var switchy = false;
    
    /*
     * Add a pixi Logo!
     */
    var logo = PIXI.Sprite.fromImage("../../logo_small.png")
    stage.addChild(logo);
    
    logo.anchor.x = 1;
    logo.anchor.y = 1;

    logo.position.x = 630
    logo.scale.x = logo.scale.y = 0.5;
    logo.position.y = 400;
    logo.interactive = true;
    logo.buttonMode = true;
    
    logo.click = logo.tap = function()
    {
        window.open("https://github.com/GoodBoyDigital/pixi.js", "_blank")
    }
    
    
    requestAnimFrame(animate);

    function animate() {
        
        count += 0.1;
        
        var blurAmount = Math.cos(count) ;
        var blurAmount2 = Math.sin(count * 0.8)  ;

        

        for (var i = 0; i < fishs.length; i++) 
        {
            var fish = fishs[i];

            fish.direction += fish.turnSpeed * 0.01;
            fish.position.x += Math.sin(fish.direction) * fish.speed;
            fish.position.y += Math.cos(fish.direction) * fish.speed;

            fish.rotation = -fish.direction - Math.PI/2;

            // wrap..

            if(fish.position.x < bounds.x)fish.position.x += bounds.width;
            if(fish.position.x > bounds.x + bounds.width)fish.position.x -= bounds.width

            if(fish.position.y < bounds.y)fish.position.y += bounds.height;
            if(fish.position.y > bounds.y + bounds.height)fish.position.y -= bounds.height
        }

    
        displacementFilter.offset.x = count * 10//blurAmount * 40;
        displacementFilter.offset.y = count * 10
        
        overlay.tilePosition.x = count * -10//blurAmount * 40;
        overlay.tilePosition.y = count * -10
        
        renderer.render(stage);
        requestAnimFrame( animate );
    }

    </script>

    </body>
</html>