我試圖通過調用我在我的顯示()回調函數的開始進行自定義CalculateFrameRate方法來計算GLUT窗口的幀率。我在計算後調用glutPostRedisplay(),我執行每一幀,因此Display()被每幀調用。使用clocks_per_sec太慢計算過量幀率
我也有一個int numFrames增量每幀(每次glutPostRedisplay被調用),我也打印出來。我的CalculateFrameRate方法計算的速率大約爲7 fps,但如果我查看一個秒錶並將其與我的numFrames增量速度增加的速度進行比較,則幀速率很容易爲25-30 fps。
我似乎無法弄清楚爲什麼會有這種差異。我下面貼
clock_t lastTime;
int numFrames;
//GLUT Setup callback
void Renderer::Setup()
{
numFrames = 0;
lastTime = clock();
}
//Called in Display() callback every time I call glutPostRedisplay()
void CalculateFrameRate()
{
clock_t currentTime = clock();
double diff = currentTime - lastTime;
double seconds = diff/CLOCKS_PER_SEC;
double frameRate = 1.0/seconds;
std::cout<<"FRAMERATE: "<<frameRate<<endl;
numFrames ++;
std::cout<<"NUM FRAMES: "<<numFrames<<endl;
lastTime = currentTime;
}
謝謝!使用你的第一個建議,它計算出我的新幀速率在25-30 fms之間,這與我用秒錶計算的速度一致。 – user1782677 2014-10-09 08:15:00
在Linux上**不要**使用gettimeofday,因爲該函數報告的值可以進行調整(NTP,用戶更改時鐘等)。 *您想使用'clock_gettime(CLOCK_MONOTONIC,...)'。 – datenwolf 2014-10-09 09:10:57
爲了獲得時間戳來計算開發過程中的幀速率,'gettimeofday'將會很好 - 因爲發生錯誤的事情是相對罕見的事件。如果你正在編寫一個使用時間來確定遊戲過程中敵人進度的應用程序,那麼出於上述原因使用'gettimeofday'顯然不是很好。 – 2014-10-09 20:40:29