FPS全稱為Frames Per Second.用於統計遊戲與影片每秒的渲染畫面(幀)次數.此值越高畫面越流暢,電影以每秒24格菲林進行播放.所以你的遊戲要流暢無停頓感.需要不低於24幀最好高於30幀.當然幀數越高越好.
FPS算法如下:
FPS = 100 * Frequency / (currentTime – startTime);
Frequency為時鐘頻率. currentTime與 startTime為前後兩次時鐘
Windows下你需要高精度計數器:
返回硬件級高精度時鐘頻率,若返回0代表系統不支持.
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
返回硬件級高精度計數器,若返回0代表系統不支持.
BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);
LARGE_INTEGER:為64BIT結構
此兩個函式需要winbase.h頭文檔和Kernel32.LIB庫
#include <winbase.h>
#pragma comment(lib, “Kernel32.LIB”)
定義如下FPS結構:
typedef struct FPS_TYP {
LARGE_INTEGER Frequency;// 計數器的頻率
LARGE_INTEGER startTime;// 啟動時鐘
float Frames;// 每秒渲染幀數
int n;// 臨時幀計數器
}FPS,*FPS_PTR;
初此化高精度定時器
bool Init_FPS(FPS_PTR fps)
{
// 返回硬件支持的高精度計數器的頻率
if (QueryPerformanceFrequency(&fps->Frequency) == false)
return false;
// 獲取啟動時鐘
QueryPerformanceCounter(&fps->startTime);//
return true;
}
計算每秒渲染幀數,每100幀進行一次計算
float Get_FPS(FPS_PTR fps)
{
++fps->n;
if (fps->n > 100)
{
LARGE_INTEGER currentTime;
// 返回高精度計數器
QueryPerformanceCounter(¤tTime);
fps->Frames = (float)100 * (float)fps->Frequency.QuadPart / ((float)currentTime.QuadPart – (float)fps->startTime.QuadPart);
fps->startTime = currentTime;// 重置時間
fps->n = 0;
}
return fps->Frames;
}
计算两次测量所花费时间
float Get_Counter_FPS(FPS_PTR fps){
LARGE_INTEGER currentTime;//当前时钟
// 返回高精度计数器
QueryPerformanceCounter(¤tTime);
float seconds = ((float)currentTime.QuadPart – (float)fps->startTime.QuadPart) / (float)fps->Frequency.QuadPart;
fps->startTime = currentTime;
return seconds;
}
你必須登入才能發表留言。