mapbox-gl添加下雪效果

原理:

  • webgl制作snowing效果

  • 叠加上一个制作的snowing canvas到mapbox gl的canvas下面

效果:

源码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>


    <style>
        #canvas{
            position: absolute;
            top: 0;
            left: 0;
            height: 100%;
            width: 100%;
        }

    </style>

</head>
<body>
<canvas id="canvas"></canvas>
<script src="../resources/webgl-utils.js"></script>
<script id="2d-vertex-shader" type="x-shader/x-vertex">
attribute vec2 a_position;

uniform vec2 u_wh;

void main() {

   gl_PointSize = 4.0;



   vec2 t1 = a_position * 2.0 / u_wh ;

   vec2 t4 = vec2(t1.x - 1.0,(t1.y - 1.0) * -1.0);

   gl_Position = vec4(t4, 0, 1);
}
</script>


<!-- fragment shader -->
<script id="2d-fragment-shader" type="x-shader/x-fragment">

precision mediump float;

void main() {

   float d = distance(gl_PointCoord , vec2(0.5,0.5));

   if (d <= 0.5){
   gl_FragColor = vec4(0.0,1.0,0.0,1.0);
   }else{
    discard;
   }



}
</script>
<script>

    var canvas = document.getElementById('canvas')

    canvas.width = screen.width;
    canvas.height = screen.height;

    var gl = canvas.getContext('webgl')



    if (gl){



        var program = createProgramFromScripts(gl, ["2d-vertex-shader", "2d-fragment-shader"]);

        gl.useProgram(program);


        var uwh = gl.getUniformLocation(program,"u_wh");

        //gl.uniform2f(uwh,screen.width,screen.height)


        gl.uniform2fv(uwh,new Float32Array([screen.width,screen.height]))

        var buffer = gl.createBuffer();



        gl.bindBuffer(gl.ARRAY_BUFFER, buffer);


        call()

        function call(){

            console.log(new Date())

            window.setTimeout(render,1000)
        }




        function render() {

            gl.clearColor(0,0,0,1)
            gl.clear(gl.COLOR_BUFFER_BIT)

            var data = []

            for(var i=0;i<1000;i++){
                data.push(Math.random() * screen.width)
                data.push(Math.random() * screen.height)
            }


            gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.STATIC_DRAW);

            var positionLocation = gl.getAttribLocation(program, "a_position");

            gl.enableVertexAttribArray(positionLocation);

            gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);

            gl.drawArrays(gl.POINTS, 0, data.length / 2);


            window.requestAnimationFrame(call)
        }




    }else{
        alert('go fuck')
    }

</script>


</body>
</html>

 

转载于:https://www.cnblogs.com/lilei2blog/p/9292799.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值