首页 > 其他分享 >关于浏览器:如何计算一个物体在WebGL中的渲染时间?看上去我计算错了

关于浏览器:如何计算一个物体在WebGL中的渲染时间?看上去我计算错了

时间:2022-11-14 10:46:26浏览次数:75  
标签:浏览器 render 渲染 WebGL shaderProgram 计算 Cesium gl

webgl渲染一帧所用时间测试

为了衡量渲染时间,我在开始和结束时都加上了时间戳。

我正在两台计算机上运行它:客户端和服务器

我不知道这种方法是否适合计算渲染时间。即使以某种方式,我仍然感觉到代码已被执行,在硬件级别,渲染的图像尚未显示在浏览器窗口中。如何了解为各个交互更新的各个框架。如果获得该状态,那么也许我可以正确计算渲染时间。

drawVolume = function()
{
    start3 = new Date().getTime();  

    gl.clearColor(0.0, 0.0, 0.0, 0.0);
    gl.enable(gl.DEPTH_TEST);
    gl.bindFramebuffer(gl.FRAMEBUFFER, gl.fboBackCoord);
    gl.shaderProgram = gl.shaderProgram_BackCoord;
    gl.useProgram(gl.shaderProgram);
    gl.clearDepth(-50.0);
    gl.depthFunc(gl.GEQUAL);
    drawCube(gl,cube);
    gl.bindFramebuffer(gl.FRAMEBUFFER, null);
    gl.shaderProgram = gl.shaderProgram_RayCast;
    gl.useProgram(gl.shaderProgram);
    gl.clearDepth(50.0);
    gl.depthFunc(gl.LEQUAL);
    gl.activeTexture(gl.TEXTURE0);
    gl.bindTexture(gl.TEXTURE_2D, gl.fboBackCoord.tex);
    gl.activeTexture(gl.TEXTURE1);
    gl.bindTexture(gl.TEXTURE_2D, gl.vol_tex);
    gl.activeTexture(gl.TEXTURE2);
    gl.bindTexture(gl.TEXTURE_2D, gl.tf_tex);
    gl.uniform1i(gl.getUniformLocation(gl.shaderProgram,"uBackCoord"), 0);
    gl.uniform1i(gl.getUniformLocation(gl.shaderProgram,"uVolData"), 1);
    gl.uniform1i(gl.getUniformLocation(gl.shaderProgram,"uTransferFunction"), 2);
    //Set Texture
    drawCube(gl,cube);

    end3 = new Date().getTime();
    render_time=end3-start3;
    console.log(render_time);
}

参考:https://www.codenong.com/39922716/(How to calculate rendering time in WebGL? Looks like I am calculating it wrongly.)

>>Cesium渲染一帧中用到的图形技术:http://www.360doc.com/content/21/1115/20/65839921_1004309620.shtml

本文通过追溯Cesium的Scene.render,解释了Cesium 1.9如何使用其WebGL渲染器渲染每一帧。在Scene.render中放置一 个断点, 运行一个Cesium应用,然后继续。 由于Cesium专注于可视化地理空间内容,因此使用许多不同光源的场景并不常见,因此 Cesium使用传统的前向阴影管线(Forward Rendering)。Cesium的管道之所以独特,是因为它使用了多个视锥体来支持巨大的视距,避免造成Z-fighting现象[Cozzi13]。 译者注:正向渲染/前向渲染(Forward Rendering)与延迟渲染(Deferred Rendering)相对,延迟渲染多用于多光照的场合。参看《正向渲染和延迟渲染彼此之间有什么不同》。

设置

Cesium将具有帧生存期的常量存储在FrameState对象中。在每一帧的开始阶段,将使用诸如相机参数和仿真时间之类的值对其进行初始化。这个FrameState对可用于其他对象, 例如在整个帧周期中生成命令(绘图调用)的图元(primitives) 。

标签:浏览器,render,渲染,WebGL,shaderProgram,计算,Cesium,gl
From: https://www.cnblogs.com/2008nmj/p/16888267.html

相关文章

  • 计算机网络--网络层-下
    网络主要功能--路由和转发网络抽象-->图路由算法:路由状态链路算法,距离向量算法;路由状态链路算法:单源最短路径,DIJKSTRA算法;问题:存在震荡可能;......
  • 第二章、试着制造一台计算机吧(连载中)
    热身问答CPU是什么的缩写?CentralProcessingUnit中央处理器Hz是表示什么的单位?赫兹,时钟频率,1s会产生的脉冲次数。频率的单位解释:通常用Hz来表示驱动CPU......
  • 第一章、计算机的三大原则
    热身问答硬件(Hardware)和软件(Software)的区别是什么?硬件是支撑计算机跑起来的实体设备,而软件是负责提供给用户良好体验的非实体程序。硬件是看得见摸得着的设备,如......
  • fp webgl
      vare=document.createElement('canvas');vart=e.getContext('webgl');varr=[];varo=t.createBuffer();t.bindBuffer(34962,o);vari=newFloat......
  • 2022-2023-1 20221326《计算机基础与程序设计》第十一周学习总结
    班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK11作业目标:计算机网络、网络拓扑、云计算、......
  • OpenGL ES OpenGL WebGL EGL WGL 区别
    目录一.OpenGL二.OpenGLES三.WebGL四.EGL和WGL五.猜你喜欢零基础OpenGLES学习路线推荐:OpenGLES学习目录>>OpenGLES基础零基础OpenGLES学习......
  • 【日期】计算后续日期
    我们经常要计算,从今天往后N天之后是哪一天(哪年哪月哪日)。现在我们就可以编写一个程序,推算指定日期之后的第N天是什么日期。输入: 年月日 N输出:(年月日+N天后的)年.......
  • 计算机等级考试二级C语言程序设计专项训练题——文件操作
    一.基础知识在C语言中,文件操作有四个步骤:①定义文件指针;②打开文件:文件指针指向磁盘文件缓冲区;③文件处理:文件读写操作;④关闭文件。文件打开函数如下:fp=fopen("......
  • 计算机等级考试二级C语言程序设计专项训练题——单链表
    一.程序填空题1.给定程序的主函数中,已给出由结构体构成的链表结点a、b、c,各结点的数据域中均存入字符,函数fun的功能是:将a、b、c三个结点链接成一个单向链表,并输出链表结点中......
  • 计算机等级考试二级C语言程序设计专项训练题——结构体
    一.程序填空题1.给定程序中,通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数fun的功能是:输出这位学生的信息。请在下划线处填入正确的内容并将下划线删除,......