我试图在我的多维数据集渲染程序中显示每秒的帧数。我想看看它的表现。那么,我该怎么办呢?我已经对此进行了研究,但是我看到的示例使用了多个类,但仍然无法使用,或者它们使用的是我没有的库。有没有办法通过使用预安装的库(例如ctime)来获取FPS?我在C++中使用OpenGL。
这是我的(空)函数:
void GetFPS()
{
}
然后使用以下命令在渲染功能中显示我的FPS:
std::cout << xRot << " " << yRot << " " << zRot << " " << FPS << "\n"; //xRot, yRot, and zRot are my cube's rotation.
我的程序设置为60FPS,但我想查看实际的FPS,而不是它的设置。
最佳答案
您必须使用clock()
采样2个不同的时间间隔
但是请注意,存在几个问题:
时钟的
clock()
您将获得0多次,并且有时您将测量一个实时时间(在我的情况下,它只是跳了15/16毫秒)去做:
double clockToMilliseconds(clock_t ticks){
// units/(units/time) => time (seconds) * 1000 = milliseconds
return (ticks/(double)CLOCKS_PER_SEC)*1000.0;
}
//...
clock_t deltaTime = 0;
unsigned int frames = 0;
double frameRate = 30;
double averageFrameTimeMilliseconds = 33.333;
while(rendering){
clock_t beginFrame = clock();
render();
clock_t endFrame = clock();
deltaTime += endFrame - beginFrame;
frames ++;
//if you really want FPS
if( clockToMilliseconds(deltaTime)>1000.0){ //every second
frameRate = (double)frames*0.5 + frameRate*0.5; //more stable
frames = 0;
deltaTime -= CLOCKS_PER_SEC;
averageFrameTimeMilliseconds = 1000.0/(frameRate==0?0.001:frameRate);
if(vsync)
std::cout<<"FrameTime was:"<<averageFrameTimeMilliseconds<<std::endl;
else
std::cout<<"CPU time was:"<<averageFrameTimeMilliseconds<<std::endl;
}
}
当您执行需要几秒钟的操作时,上面的代码也适用。我进行的计算每秒更新一次,您也可以更频繁地更新它。 (请注意,我在大多数需要FPS的项目中都使用了该代码)