• 屏幕分辨率与FPS


    屏幕分辨率

    刷新率分为垂直刷新率和水平刷新率,一般提到的刷新率通常指垂直刷新率。

    垂直刷新率表示屏幕的图象每秒钟重绘多少次,也就是每秒钟屏幕刷新的次数,以Hz(赫兹)为单位。

    刷新率越高越好,图象就越稳定,图像显示就越自然清晰,对眼睛的影响也越小。刷新频率越低,图像闪烁和抖动的就越厉害,眼睛疲劳得就越快。

    一般来说,如能达到80Hz以上的刷新频率就可完全消除图像闪烁和抖动感,眼睛也不会太容易疲劳。

    显然刷新率越高越好,但是建议你不要让显示器一直以最高刷新率工作,那样会加速CRT显像管的老化,一般比最高刷新率低一到两档是比较合适的,建议85Hz。

    而液晶显示器(LCD/LED)的发光原理与传统的CRT是不一样的,由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不象阴极射线管显示器(CRT)那样需要不断刷新亮点。

    因此,液晶显示器画质高而且绝对不会闪烁,把眼睛疲劳降到了最低。

    而刷新率对CRT的意义比较突出,有时,LCD/LED刷新高了,反而会影响其使用寿命般保持在60-75就可以了。

    参考: http://ask.zol.com.cn/q/6612.html

     

     

    以我的笔记本为例,用了2个显示器,如下图:

    image

     

    Mac 下外接 Dell GL2250 显示器的刷新率:

    image

    Mac 笔记本自身的显示器 刷新率是没法设置的。

    image

    查看硬件详情可以看到:

     

    image

    外接 Dell E2715H 的分辨率是 60Hz, 

    查询硬件说明,跟显示器有关的如下:
    https://support.apple.com/kb/SP649?locale=zh_CN&viewlocale=zh_CN 

    • 13.3 英寸 (对角线) LED 背光光面宽显示屏,支持数百万色彩。
    • 支持分辨率:16:10 宽高比可显示 1280 x 800 (初始)、1152 x 720、1024 x 640 和 800 x 500 像素;4:3 宽高比可显示 1024 x 768、800 x 600 和 640 x 480 像素;4:3 拉伸宽高比可显示 1024 x 768、800 x 600 和 640 x 480 像素;3:2 宽高比可显示 720 x 480 像素;3:2 拉伸宽高比可显示 720 x 480 像素

     

    LCD的闪烁频率是不能调节的。

    液晶显示器的刷新频率,就使用操作系统默认的60Hz,不要改(不管系统默认多少都不要改)。LCD不是CRT显示器,它的内部不是阴极射线管,不是靠电子枪去轰击显像管上的磷粉产生图像。

    LCD显示器是靠后面的灯管照亮前面的液晶面板而被动发光,只有亮与不亮、明与暗的区别。所以,液晶显示器没有电子枪逐行及隔行扫描屏幕的原理(LCD显示器工作时,每个像素点自始至终都发光,不存在闪烁的现象),也就不存在刷新频率的概念,改不改都一个样,刷新频率对所有的LCD均不起作用。

     

    FPS 相关信息

    frames per second(FPS, 帧率),作为渲染效率的一种衡量,反映的是整个程序在当前的一个渲染状态下平均每秒所能容纳的“渲染循环”执行次数,也表征了平均每个“渲染循环”(帧)所用的时间。就表面来看,很多人觉得只要在一个每帧运行一次的函数内设置一个计数器,这样计算出一秒内的记数,便可作为该1s瞬间的FPS了;同样也很容易能求出平均FPS。

    http://www.zwqxin.com/archives/opengl/swapbuffers-fps-vsync.html

    为什么我的程序的FPS基本不会大于75呢?

    恩,以前做的DEMO,如果是有计算FPS的,都是这样:场景复杂的时候它可以降低到1或者直接0掉,但是对于简单的场景它永远只有72左右的FPS;再简单,也是72左右;再再简单,还是72左右……可以说是“封顶”了。

    于是我把整个渲染流程核查一次,先把消息处理和循环部分弄成一般WIN32的形式,貌似无关……然后又检查像素格式,直接把最佳像素格式设置为10,(某些程序DEMO中设计者会轮巡所有像素格式找出最佳匹配的,于是我也容易知道对我最“友好”的像素格式是10号……)貌似也没啥。另外,检查FPS计算的式子,没发现异常。我又把渲染函数RenderGLScene内的东西一个个注释……才发现,只有当我注释了SwapBuffers时,屏幕显示死掉了,但FPS上到了3000以上……对比72的FPS我还是比较相信这个——所以,是双缓冲的关系么。在像素设置中改像素描述器的PFD_DOUBLEBUFFER为PFD_SWAP_COPY、PFD_SWAP_EXCHANGE之类的,这下FPS也是很高,但是屏幕猛闪~ - - 。google吧,步小心发现了一个东西:vsync。

    在学Irrlicht引擎的时候,建立DEVICE的时候有一个参数选项:vsync,vertical syncronisation,API解释得不清楚,就知道跟屏幕有关……屏幕?屏幕刷新率?我突然想起我做图像处理的WIN32程序时的一个窘况:release出来的程序在人家面前演示,发现图片/视频出不来,后来明白是屏幕刷新率的问题——屏幕刷新率太高会把WIN32循环对屏幕窗口所做的东西“消灭”掉。那么,这里呢?好,我去看文章了:vertical syncronisation

    垂直同步。原来,程序每一帧的函数全部执行完之后,还要等屏幕刷新了才去执行下一帧啊!一查屏幕刷新率——难怪是72左右呀,正因为偶电脑上设置的屏幕刷新率是72!恩,这里头肯定有个像sleep那样有等待功能的函数做帮凶——噢,亲爱的SwapBuffers,是你呀~

    曾经有人说SwapBuffers比glut库的glutSwapBuffers效率低不少(见这里),但这里不是这个问题。无论是SwapBuffers还是glutSwapBuffers还是wglSwapBuffers,它们位于渲染体的末端,都有这么个“功能”:当显卡的垂直同步功能vsyn被置为TRUE时,每一帧渲染完后来到SwapBuffers,都要悲情地等待下一次屏幕刷新的时刻到来,再交换前后缓冲并开始执行下一帧……上面那篇文章用到了WGL_EXT_swap_control扩展,利用wglSwapIntervalEXT来设置“等待的间隔”。间隔是指一个屏幕刷新的周期,譬如屏幕刷新率是72Hz,那么一个周期就是(1/72)s, wglSwapIntervalEXT(1)表明要让SwapBuffers类函数开始执行后要等到下一个屏幕刷新时才返回——然后继续下一帧的执行。wglSwapIntervalEXT(2)就是等下个再下个屏幕刷新了。这么说,wglSwapIntervalEXT(0),哈,就是不用等——关闭垂直同步Vsync。

    曾经有人说SwapBuffers比glut库的glutSwapBuffers效率低不少(见这里),但这里不是这个问题。无论是SwapBuffers还是glutSwapBuffers还是wglSwapBuffers,它们位于渲染体的末端,都有这么个“功能”:当显卡的垂直同步功能vsyn被置为TRUE时,每一帧渲染完后来到SwapBuffers,都要悲情地等待下一次屏幕刷新的时刻到来,再交换前后缓冲并开始执行下一帧……上面那篇文章用到了WGL_EXT_swap_control扩展,利用wglSwapIntervalEXT来设置“等待的间隔”。间隔是指一个屏幕刷新的周期,譬如屏幕刷新率是72Hz,那么一个周期就是(1/72)s, wglSwapIntervalEXT(1)表明要让SwapBuffers类函数开始执行后要等到下一个屏幕刷新时才返回——然后继续下一帧的执行。wglSwapIntervalEXT(2)就是等下个再下个屏幕刷新了。这么说,wglSwapIntervalEXT(0),哈,就是不用等——关闭垂直同步Vsync。

    来自:http://www.zwqxin.com/archives/opengl/swapbuffers-fps-vsync.html

    image

     

    image

  • 相关阅读:
    如何加速JavaScript 代码
    以Kafka Connect作为实时数据集成平台的基础架构有什么优势?
    Java多线程开发系列之一:走进多线程
    java运行环境和运行机制
    C#先序遍历2叉树(非递归)
    Java 之 List<T> 接口的实现:ArrayList
    string.split() 解读---------->从java 和C#的角度剖析
    究竟什么是语法糖呢
    Eclipse 恢复删除的文件
    Notepad++自动刷新文本
  • 原文地址:https://www.cnblogs.com/ghj1976/p/5230576.html
Copyright © 2020-2023  润新知