让requestAnimationFrame实现定时调用功能

摘要:
原理创建函数调用和渲染调用---->setTimeout----->渲染---->requestAnimationFrame---->调用实现webgl渲染点,并每秒重新渲染一次效果源代码<!DOCTYPEhtml>&书信电报;htmllang=“en”>&书信电报;头部>&书信电报;元字符集=“UTF-8”&gt

原理

  • 创建函数call和render
  • call----->setTimeout----->render----->requestAnimationFrame----->call

实施

webgl渲染点,每秒重新渲染一次

效果

让requestAnimationFrame实现定时调用功能第1张

源码

<!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>

免责声明:文章转载自《让requestAnimationFrame实现定时调用功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇给25岁男人的忠告:有种责任感.栅格化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx配置静态路径

原因:文件资料上传至ftp上,由于需要大量图片回显,导致服务器压力过大,反应不过来,所以改为通过nginx做静态资源代理。 服务器路径为:/var/ftp/2020/10/09/12a1b8f973fc4d51b67e9a168fcb757f1602227927258.jpg 初次尝试,是通过: location /ftp/ {      root /va...

mobiscroll 日期问题

做的一个项目中用到了mobiscroll日期控件,设置距离当前日期往前推一个月的时间出现如下图问题 弹出窗默认的年份不对,后来查找原因是初始化属性配置有问题,应该将设置为dateFormat:'yy-mm-dd'就可以了 <script type="text/javascript"> $(function () {...

flex for循环

//for ..in 循环中的迭代变量包含属性所保存的值和名称 //for each..in 循环中的迭代变量只包含属性所保存的值,而不包含属性的名称 //对象遍历,可以获取属性名称 private function testObject():void...

Mysql 命令行下建立存储过程

建立存储过程的sql如下: CREATE PROCEDURE  proc_variable () BEGIN DECLARE dec_var_ VARCHAR(100); DECLARE rep_num INT; DECLARE dec_var CURSOR  for SELECT ID_  FROM ACT_RU_VARIABLE WHERE NAME...

centos7下Zookeeper+sheepdog集群搭建

zookeeper 安装命令 yum install zookeeper -y            (版本:zookeeper.x86_64      3.4.6-1) yum install zookeeper-lib -y            (版本:zookeeper-lib.x86_64   3.4.6-1) 配置文件:/etc/zooke...

权值初始化

设计好神经网络结构以及loss function 后,训练神经网络的步骤如下: 初始化权值参数 选择一个合适的梯度下降算法(例如:Adam,RMSprop等) 重复下面的迭代过程: 输入的正向传播 计算loss function 的值 反向传播,计算loss function 相对于权值参数的梯度值 根据选择的梯度下降算法,使用梯度值更新每个权值参数...