c – 如何制作基本的FPS计数器?

c – 如何制作基本的FPS计数器?,第1张

概述我正在尝试在我的立方体渲染程序中显示每秒帧数.我想看看它的表现.那么,我该怎么做呢?我已经对此进行了研究,但是我看到的例子使用了多个类但仍然无法工作,或者他们使用的是我没有的库.有没有办法通过使用像ctime这样的预安装库来获取FPS?我正在使用OpenGL和C. 这是我的(空)函数: void GetFPS(){} 然后我在我的渲染功能中显示我的FPS: std::cout << xRot 我正在尝试在我的立方体渲染程序中显示每秒帧数.我想看看它的表现.那么,我该怎么做呢?我已经对此进行了研究,但是我看到的例子使用了多个类但仍然无法工作,或者他们使用的是我没有的库.有没有办法通过使用像ctime这样的预安装库来获取FPS?我正在使用OpenGL和C.

这是我的(空)函数:

voID GetFPS(){}

然后我在我的渲染功能中显示我的FPS:

std::cout << xRot << " " << yRot << " " << zRot << " " << FPS << "\n"; //xRot,yRot,and zRot are my cube's rotation.

我的程序设置为60FPS,但我希望看到实际的FPS,而不是它的设置.

解决方法 您必须使用clock()对2个不同的时间间隔进行采样
但是请注意有几个问题:

>时钟的分辨率是几毫秒(你可以使用std :: chrono等解决方法,但是根据实现情况,即使是chrono也可能没有那么高的分辨率.在我的PC上使用GCC 4.9.1即使使用std,我的分辨率也不会超过16毫秒::时辰.
>小心地使用clock()你将获得0次,并且在某个时候你会测量一个实时(在我的情况下它只是跳15/16毫秒)
>除非您使用垂直同步(vsync),否则您将无法测量实际帧时间,而只测量渲染循环中花费的cpu时间(要激活vsync,您必须使用SetSwAPInterval(1)您的 *** 作系统功能或例如使用像SDL这样的库提供便携式跨平台实现)
>要测量实际渲染时间,您可以使用GL’S时间查询(您可以随时绑定1个计时器,因此如果您正在测量帧速率,则无法测量渲染特定内容的时间长度).
>不要测量FPS(除非您只是想向用户显示),而是以毫秒为单位测量帧时间,这样可以更直观地表现性能. (你知道从100到80 FPS是2.5毫秒的差异,从40到20 FPS是25毫秒差异!)

去做:

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的项目中都使用了该代码)

总结

以上是内存溢出为你收集整理的c – 如何制作基本的FPS计数器?全部内容,希望文章能够帮你解决c – 如何制作基本的FPS计数器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存