首页 > 其他分享 >帧率计算(fps计算)

帧率计算(fps计算)

时间:2024-06-03 17:33:45浏览次数:17  
标签:fps int deltaTime static 计算 frameCount 1000

一、固定时间帧数法

帧率计算的公式为:

fps = frameNum / elapsedTime;

如果记录固定时间内的帧数,就可以计算出同步率。此种方法用得较多。

int fps()
{
    static int fps = 0;
    static int lastTime = getTime(); // ms
    static int frameCount = 0;

    ++frameCount;

    int curTime = getTime();
    if (curTime - lastTime > 1000) // 取固定时间间隔为1秒
    {
        fps = frameCount;
        frameCount = 0;
        lastTime = curTime;
    }
    return fps;
}

还有另一种写法:

int fps(int deltaTime)
{
    static int fps = 0;
    static int timeLeft = 1000; // 取固定时间间隔为1秒
    static int frameCount = 0;

    ++frameCount;
    timeLeft -= deltaTime;
    if (timeLeft < 0)
    {
        fps = frameCount;
        frameCount = 0;
        timeLeft = 1000;
    }
    return fps;
}

二、固定帧数时间法

帧率计算的公式为:

fps = frameNum / elapsedTime;

如果每隔固定的帧数,计算帧数使用的时间,也可求出帧率。此种方法使用得较少。

int fps()
{
    static int fps = 0;
    static int frameCount = 0;
    static int lastTime = getTime(); // ms

    ++frameCount;

    if (frameCount >= 100) // 取固定帧数为100帧
    {
        int curTime = getTime();
        fps = frameCount / (curTime - lastTime) * 1000;
        lastTime = curTime;
        frameCount = 0;
    }
    return fps;
}

三、实时计算法

实时计算法直接使用上一帧的时间间隔进行计算,结果具有实时性,但平滑性不好。

int fps(int deltaTime) // ms
{
    int fps = static_cast<int>(1.f / deltaTime * 1000); // 别忘了先转换为浮点数,否则会有精度丢失
    return fps;
}

四、总平均法

总平均法使用全局帧数除以全局时间,以求出帧率。

int beginTime = getTime();

int fps()
{
    static int frameCount = 0;

    ++frameCount;

    int deltaTime = getTime() - beginTime();
    return static_cast<int>(frameCount * 1.f / deltaTime * 1000); // 别忘了先转换为浮点数,否则会有精度丢失
}

五、精确采样法

精确采样法采样前N个帧,然后计算平均值。此种方法需要额外的内存空间,所以不常用。

int fps(int deltaTime) // ms
{
    static std::queue<int> q;
    static int sumDuration = 0; // ms

    int fps = 0;
    if (q.size() < 100) // 样本数设为100
    {
        sumDuration += deltaTime;
        q.push(deltaTime);
        fps = static_cast<int>(q.size() * 1.f / sumDuration * 1000.f); // 别忘了转换为浮点数,否则会有精度丢失
    }
    else
    {
        sumDuration -= q.front();
        sumDuration += deltaTime;
        sumDuration.pop();
        sumDuration.push(deltaTime);
        fps = static_cast<int>(100.f / sumDuration * 1000.f); // 别忘了转换为浮点数,否则会有精度丢失
    }
    return fps;
}

六、平均采样法

平均采样法利用上次的统计结果,克服了精确采样法需要使用额外空间的缺点。此种方法较常用。

int fps(int deltaTime) // ms
{
    static float avgDuration = 0.f;
    static alpha = 1.f / 100.f; // 采样数设置为100
    static int frameCount = 0;

    ++frameCount;

    int fps = 0;
    if (1 == frameCount)
    {
        avgDuration = static_cast<float>(deltaTime);
    }
    else
    {
        avgDuration = avgDuration * (1 - alpha) + deltaTime * alpha; 
    }

    fps = static_cast<int>(1.f / avgDuration * 1000);
    return fps;
}

标签:fps,int,deltaTime,static,计算,frameCount,1000
From: https://www.cnblogs.com/LSPP/p/18229320

相关文章

  • 初识计算机
    这节旨在对计算机有个大体划分。目前计算机对我们来说就像是一个黑疙瘩,它由两部分组成——软硬件。何为硬件,何为软件?硬件就是组成计算机的那些看得见摸得着的电子器件,软件就是人类事先编好的程序,这些程序和硬件共同发挥作用。而软件又可以分为两大类:系统软件和应用软件。系统......
  • 计算机毕业设计Android的个人日程计划系统的APp设计与实现
    1、选题背景如今,安卓手机的使用基本上已经广泛应用各个年龄段,也就是说当人们充分接触手机时,在享受手机带来的方便快捷和沟通乐趣时,也存在一些问题,主要表现在“手机”上。人们使用手机的时间越来越长,他们也觉得时间越来越短。时间就是金钱,这是当今社会普遍认可的事实,也就是说人......
  • 计算机毕业设计Android的健康运动计步器APP的设计
    基于Android的健康计步APP可以包含以下功能模块:移动端应用(Android前端)功能模块:(1)用户注册和登录功能:•   用户注册:用户可以输入用户名、密码和其他必要信息进行注册,并将注册信息保存到数据库中。•   用户登录:用户可以使用用户名和密码进行登录,验证用户凭据,以便访问......
  • 计算机毕业设计Android大学生兼职信息评价系统
    android端:(1)用户注册与登录:学生和用人单位可以通过手机号码注册账户并登录。(2)个人信息管理:用户可以编辑和管理个人信息,包括头像、昵称、联系方式等。(3)兼职搜索与浏览:学生可以根据关键词、地点、工资等条件进行兼职搜索,并浏览符合条件的兼职信息。(4)兼职申请与投递简历:学生可以选......
  • 计算机网络基础-VRRP原理与配置
    目录一、了解VRRP1、VRRP的基本概述2、VRRP的作用二、VRRP的基本原理1、VRRP的基本结构图2、设备类型(Master,Backup) 3、VRRP抢占功能3.1:抢占模式3.2、非抢占模式4、VRRP设备的优先级5、VRRP工作原理三、VRRP的基本配置3.1、配置主设备与备用设备​ 3.2、结果......
  • 第1章 计算机系统漫游
    计算机系统是由硬件和系统软件组成的。总的来说,CSAPP就是通过跟踪hello程序,理解系统在执行该程序时做了什么。///helloprogram#include<stdio.h>intmain(){ printf("hello,world\n"); return0;}1.1信息就是位+上下文hello程序的生命周期从一个源程序开始,即程序......
  • 英特尔工业实时计算高级课程推广
    现今边缘端正在向软件定义的解决方案转型,其中一个关键要素是需要在同一系统上支持实时以及非实时工作负载。系统的实时性主要体现在时间同步和及时性:时间同步利用软硬件协调各模块之间时钟,同时与外部设备时钟同步;及时性体现在各模块之间数据处理以及网络数据处理的低延迟。英......
  • PsShutdown 工具的基本用法和操作流程,帮助他们在远程管理中更方便地实现计算机的关机
    PsShutdown是PSTools工具集中的一款工具,用于远程关闭或重启计算机。以下是PsShutdown工具的初级应用大纲示例:PsShutdown初级应用大纲工具介绍简要介绍PsShutdown工具的作用和功能,以及如何使用它来远程关闭或重启计算机。安装与配置指导用户如何下载、安装和......
  • 计算机SCI期刊,中科院3区,专业认可度高,收稿范围广泛
    一、期刊名称ComputersandElectricalEngineering二、期刊简介概况期刊类型:SCI学科领域:计算机科学影响因子:4.3中科院分区:3区三、期刊征稿范围计算机的影响在电气工程领域最具革命性。电气和电子系统的设计、分析和操作现在由计算机主导,这一转变的动机是计算机......
  • 深度学习--风格迁移Gram matric的计算--83
    目录在计算机视觉中,Gram矩阵常用于衡量图像的风格特征。给定一个特征图(例如,卷积层的输出),Gram矩阵是该特征图的内积。在TensorFlow中,你可以使用tf.linalg.einsum来计算Gram矩阵。以下是一个计算Gram矩阵的TensorFlow实现样例:importtensorflowastfdefgram_matrix(input_ten......