DX11 一 效能計時器

2021-10-06 07:13:06 字數 2210 閱讀 4523

05/19/2020

實現計時器

遊戲主迴圈呼叫tick

reset

遊戲時間

gettotaltime

要正確的實現動畫效果,我們必須記錄時間,尤其是要精確測量動畫幀之間的時間間隔。當幀速率高時,幀之間的時間間隔就會很短,所以需要乙個高精確度計時器。

#include

//win32 計時器

__int64 currcounts;

//高精度計時器需要精度高的:64位

queryperformancecounter

((large_integer*

)&currcounts)

;//單位:計數,獲得當前每秒的計數,又叫頻率

double msecondspercount =

1.0/

(double

)currcounts;

// 單位:秒,每次計數的時間長度

__int64 a =0;

queryperformancecounter

((large_integer*

)&a)

;__int64 b =0;

queryperformancecounter

((large_integer*

)&b)

;double deltatime =

(b-a)

* msecondpercount;

//兩個時間點間隔時間,單位:秒

class

gametimer

;

當渲染動畫幀時,我們必須知道幀之間的時間間隔,以使我們根據逝去的時間長度來更新遊戲中的物體。

δ t=

δtcu

rrti

me=δ

tpre

vtim

e\delta t = \delta t_ = \delta t_

δt=δtc

urrt

ime​

=δtp

revt

ime​

注意:至少要達到每秒30幀的頻率才能等到比較平滑的動畫效果

平滑:物體移動沒有卡頓的效果,連貫性!

實現

void gametimer::

tick()

__int64 currtime;

queryperformance

((large_integer*

)& currtime)

; mcurrtime = currtime;

//delta t

mdeltatime =

(mcurrtime-mprevtime)

*msecondspercount;

mprevtime = mcurrtime;

//確保不是負值,dxsdk中的cdxuttimer提到,如果處理器進入了節點模式

//或切換到另乙個處理器,mdeltatime會變成負值

if(mdeltatime <0)

}

run()

//遊戲主迴圈

else

}//... return

}幀的統計數值 calculateframestats

calculateframestats()

}

void gametimer::

reset()

從應用程式開始執行時經過的時間總量,不包括暫停時間,這個叫做遊戲時間。

stop

void gametick::

stop()

}

start
void gametimer::

start()

}

返回了自呼叫reset之後經過的時間總量,其中不包括暫停時間

float gametimer::

gettotaltime()

const

else

}

introduction to 3d game progrmming with directx11 第四章

Unity計時器(一)

第一次寫部落格,很緊張,主要寫寫自己造的一些小輪子吧,因為本人很懶,喜歡貼上複製,所以很注重 的重用性,也喜歡將一些功能進行封裝迴圈利用,完美的詮釋了面對物件的程式設計思想,話不多說,下面直接擼 裡我寫了很詳細的注釋 事件執行的間隔 執行的事件 是否在相同時間間隔內連續執行相同的事件 public ...

c納秒級計時器 C 11 計時器!真香

在我們寫程式過程中,有時候需要測試我們的程式語句執行時間的耗時,當前也是有很多的庫提供我們去使用,一直沒有良好的跨平台的庫可以提供出來 而且一般這種 也是由我們程式設計師自己呼叫系統的庫來進行,但是往往會出現精度不足和不支援跨平台等問題 他來了。他來了。他踩著七彩祥雲來了 他 就是c 11中引進bo...

C 中的高效能計時器

原帖及討論 http bbs.bccn.net thread 211272 1 1.html 簡介精確的時間計量方法在某些應用程式中是非常重要的。常用的 windows api 方法 gettickcount 返回系統啟動後經過的毫秒數。另一方面,gettickcount 函式僅有 1ms 的分辨精...