zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Xilinx SelectIO资源的使用总结
    Altera usbblaster驱动无法安装的解决办法
    Xilinx FPGA的约束设计和时序分析总结
    OpenMANIPULATORX基本操作
    OpenMANIPULATORX ROS包安装 (Melodic)
    .xacro文件
    open_manipulator OpenCR代码解读
    OpenMANIPULATORX GUI
    ROS建模 urdf
    多机器人Gazebo仿真
  • 原文地址:https://www.cnblogs.com/lilei2blog/p/9292799.html
Copyright © 2011-2022 走看看