屏幕分辨率與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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM