在全屏模式下运行时,有些DEMO的FPS可以达到上百帧,而有些DEMO的FPS则怎么也超不过显示器的屏幕刷新频率。这个问题困惑着好多人,其中也包括我自己。

最近,我购置了一台电脑。在无意中发现显卡的Direct3D与OpenGL设置中都有一个选项:“等待垂直同步信号”。将它前面的对号去掉后,发现以前那些“不论多么简单,FPS也超不过屏幕刷新率”的DEMO,现在运行时全都是几百帧。

于是我脑中产生了几个想法:
1, 既然“等待垂直同步信号”这个选项在显卡的设置里出现,那就说明这是硬件支持的特性。默认情况下,这个选项前是打勾的,也就是等待垂直同步信号。
2, 在默认情况下我们运行不同的DEMO会产生两种情况:一种FPS可以超过屏幕刷新率,另一种不行。这说明图形API(DirectX或OpenGL)提供 了设置这个属性的函数,在做DEMO时调用这个函数,我们就可以关闭这个属性,从而达到较高的帧数。那么这个函数是什么?
3, 如果上面都是真的,那为什么等待垂直同步信号会有较低的帧率呢?它背后的原理是什么?

带着这些想法和问题,我进一步查了相关资料,最终有了一些理解,但还是有一些疑惑。希望大家一同收集相关的资料,并讨论这个问题,最后能解决这个问题。

当显示器显示一幅图像时,电子枪是从左到右、从上到下来扫描屏幕的。由电子枪打出的电子经由偏转线圈的偏转得以打到屏幕的不同点上。电子束在从左到右扫描完一行后,需要回到起始方向进行下一行的扫描,这个返回的工作由回程转换器来完成。

这一系列动作要想很精确,就得使电子枪、偏转线圈、回程转换器协同(同步)工作。为了达到这个目标,我们需要两个信号:
1, 水平同步信号,显示设备(显示器)接收到这个信号后,就开始画下一行。
2, 垂直同步信号,显示设备(显示器)接收到这个信号后,就开始画下一帧。
这样,通过传递这两个信号,电子枪、偏转线圈、回程转换器就能精确协作了。

这两个信号由谁传递呢?答案是显卡,显卡每隔一段时间就会给显示设备(显示器)发送这样的信号。

显卡隔多长时间发送一次信号呢?这和屏幕的刷新率有关。假设我们的屏幕刷新率是60HZ,也就是一秒内我们要发送60个垂直同步信号给显示设备 (显示器)。再假设我们的分辨率是800*600,就是说屏幕一共有600行,一秒内我们会发送这么多个水平同步信号:60*600=36000。画每一 条线所用的时间也可以容易的算出来。

现在已经有答案了:如果我们运行DEMO时“等待垂直同步信息”,则即使要画的场景很简单,很快就计算完了,但必须等待垂直同步信号的到来,才开始画下一帧。所以FPS超不过屏幕刷新率。

我没有用过D3D,只是查了一下帮助文档,找到D3D7中的Flip函数的第二个参数可以传入DDFLIP_NOVSYNC,NOVSYNC就是不等待垂直同步信号的意思(No vertical sync)。
D3D8中查到了一个D3DSWAPEFFECT_COPY_VSYNC,也与垂直同步信号有关。

几个需要大家讨论的问题:
1, 窗口模式下,FPS不受“等待垂直同步信号”的影响,而全屏模式下(独占显卡)则受影响,为什么?
2, OpenGL中(可能在扩展中)有没有设置这个的函数,或是在Windows API中有这样的函数?
3, 最重要的是查到函数后怎么用到程序中去?

---------------------------------------------------------------

窗口模式下的显示是使用桌面设置,当然FPS不受“等待垂直同步信号”的影响,而全屏模式下(独占显卡)则受影响,为什么?
---------------------------------------------------------------

在Windows平台下控制OpenGL的等待垂直同步信号是通过扩展WGL_EXT_extensions_string 来实现的,这个扩展添加了两个函数,
wglSwapIntervalEXT
wglGetSwapIntervalEXT

如果传给wglSwapIntervalEXT的参数为0,则表示关闭垂直同步

具体可以看
http://oss.sgi.com/projects/ogl-sample/registry/EXT/wgl_swap_control.txt

---------------------------------------------------------------

“不过既然如此,还追求高帧数做什么?”

1. 帧数高说明你程序的效率高,也就说明你的水平高 :)

2. 高效的图形程序可以为游戏提供更加复杂的游戏场景,也可以腾出更多
    的CPU时间来计算更加真实的物理和更高级的AI,以提高游戏的真实度
    和可玩性。

3. 真实世界中的时间和运动都是连续的,而在计算机中,则是通过一个个
    离散的时间片来模拟连续的真实世界,时间片分的越细,模拟的效果就
    越真实。
    游戏中,时间片就是按照帧来划分的,一帧就是一个时间片。拿Quake
    来说,100帧和60帧玩起来的感觉就有很大差别。帧数越高,动作就越
    平滑,越容易做出高难度的动作。

---------------------------------------------------------------

你说垂直同步信号和水平同步信号仅仅是由显卡提供的,不完全吧.
如果显示器不接显卡,有的显示器能够显示出no signal的字样在屏幕上,这个信号是谁控制的呢?应该是显示器内部吧.

---------------------------------------------------------------

把那个几百帧的DEMO给出来看看吧。
个人认为:让帧数超过显示器刷新频率只是为了证明自己牛而已(真正牛不牛还有待考证),实际上并没有意义,人眼分辨不出120帧和500帧的区别。

游戏的帧率与屏幕的刷新率相关推荐

  1. 怎样获取屏幕的刷新率

    做游戏或者动画的时候,有时候大家会遇到要根据屏幕的刷新率来确定图画的显现,或者更改刷新率,并不是所有的屏幕刷新率都是60,怎样获取自己屏幕的刷新率呢,代码如下 #include <graphic ...

  2. 显示器屏幕的刷新率hz和帧数fps有什么区别?

    关于游戏帧数FPS值和屏幕刷新率,相信是电竞玩家比较关心的话题了.如果我们需要了解刷新率和帧数的区别,那么我们就需要知道它们原本是什么意思!下面装机之家科普一下. 帧数FPS 一般就是我们所说一秒钟内 ...

  3. 计算机屏幕频率是什么,计算机屏幕的刷新率hz和帧速率fps有什么区别?看完之后,我终于明白了!...

    关于刷新率Hz和帧速率fps的话题,我相信喜欢玩游戏的用户和喜欢学习硬件的人会经常提到它. 只要说出这个话题,许就可以迅速聚集在一起讨论并提出各种理论. 那么,刷新率Hz和帧速率fps有什么区别?下面 ...

  4. 地址栏 输入 参数 刷新参数丢失_小米11 Pro屏幕参数曝光:2K屏幕+120Hz刷新率

    本周一,高通已经宣布将于12月初举行的骁龙技术峰会上正式发布新一代旗舰处理器--骁龙875.根据此前的曝光消息,小米11系列将首发搭载这颗芯片,网上也已经开始对这款新机进行曝光. 日前,海外知名论坛X ...

  5. JAVA 游戏开发之——FPS(帧频刷新率)精准控制

            JAVA游戏开发之FPS精准控制 2013年7月18日 目录 JAVA游戏开发之FPS精准控制... 1 1       概述... 2 1.1        编写目的... 3 2  ...

  6. Unity帧率、屏幕刷新率

    帧率 帧:影像动画中最小单位的单副影像画面,相当于电影胶片上的每一个镜头 帧率:图形处理器每秒更新帧的次数 帧率单位:帧每秒(F/S, Frame pre second,简称 FPS) 帧率(Fram ...

  7. 修改手机屏幕刷新率_到底高刷新率屏幕为智能手机带来什么?

    高刷新率屏幕 2019/4/30 当年乔布斯说道:"当你距离屏幕10-12英寸时,300以上的ppi就分辨不出像素点."显然,现在人们已经不再满足这"10-12英寸&qu ...

  8. 一秒点击屏幕次数_手机屏幕刷新率那点事儿!

    屏幕刷新率是指电子束对屏幕上的图像重新扫描的次数.刷新率越高,显示的画面稳定性就会越好,眼睛也就不会累. 屏幕有刷新率,我们的眼睛也有刷新率,所谓的人眼刷新率就是我们眼睛一秒看到的图像数量.到目前为止 ...

  9. 位深度/像素/分辨率/图像大小的计算/帧率/刷新率

    有关图像的基本名词解释: 位深度: 在记录数字图像的颜色时,计算机实际上是用每个像素需要的位深度来表示的.黑白二色的图像是数字图像中最简单的一种,它只有黑.白两种颜色,也就是说它的每个像素只有1位颜色 ...

最新文章

  1. [转]软件项目版本号的命名规则及格式
  2. 在iOS中使用tableView
  3. jsp mysql 分页插件_知识分享:Mybatis框架如何使用分页插件呢?
  4. NioEventLoopGroup的构造函数
  5. scala把序列分解成子集(group by,partition)
  6. 课程 | 《知识图谱》第二期重磅来袭!
  7. Idea设置多开窗口
  8. Docker学习总结(56)——Docker-compose 基础知识温习
  9. Flutter实战一Flutter聊天应用(十八)
  10. wifi驱动总结(2)
  11. java中Cookie类详解
  12. 英文顺序:第一~第N
  13. 车联网之:操作系统QNX
  14. C语言—各种数据类型间的混合运算
  15. 2023最新猕猴桃影视系统源码/影视APP源码+安卓/苹果双端
  16. Android中显示PDF的问题解决(安卓端使用pdf.js CDN模式)
  17. 【机器学习】当贝叶斯、奥卡姆和香农一起来定义机器学习时
  18. fetch用英语解释_fetch是什么意思中文翻译
  19. 唐代韩愈的《祭十二郎文》
  20. Spring Cloud的熔断器

热门文章

  1. 使用PS快速制作App logo图
  2. Mina2框架--服务端与客户端通信
  3. 2020年DDCTF-web签到题题解
  4. 失踪61年的上帝之鸟重回美国阿肯色州 (组图)
  5. 什么电脑录音软件是最好用的
  6. 利用Python自制雷霆战机小游戏,娱乐编程,快乐学习!
  7. 智慧停车系统是怎么运行的?
  8. 【Pandas总结】第八节 Pandas 合并数据集_pd.merge()
  9. iPhone屏幕适配(之屏幕尺寸)
  10. access筛选末位数字为1或5_数字鸿沟理论不会用?北大必考常考,我们以快手短视频为例...