计算机动画经常用于描述一些自然界的物理运动, 本文介绍如何实现动态过程的模拟。

演示程序: https://download.csdn.net/download/qq_31804159/10390092

效果如下图:

模拟小球自由落体

对于一个自由落体,大家都清楚计算公式,这里不再叙述。我们的目的是实现的是一个动态变化的过程,那么我们的变化过程应该是随着时间改变的。其实我们所谓的动态过程就是静态状态的一个集合,但是我们人的眼睛有一个特点,那就是视觉暂留,一旦我们把多个静态的场景变化的快一点(每秒刷新24次及以上,即fps=24),在我们人眼看来就是动态的,但是为了提高流畅度和交互性一般fps取30~60。

下面介绍如何在Qt中实现:

我们在qt中借助qt的计时器类来实现动态过程

1.新建一个计时器对象

QTimer *timer = new QTimer(this);

2.创建连接,计时器绑定到当前窗口的updateScane()槽函数中。

connect(timer,SIGNAL(timeout()),this,SLOT(updateScane()));

3.启动计时器,参数的单位为ms,

 timer->start(20);   //每0.02秒执行一次updateScane函数,fps = 50;

4.完整过程

声明:

QTimer *timer;
public slots:

 void updateScane();

初始化:

    timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(updateScane()));
    timer->start(20);


updateScane()函数

void updateScane()
{
   time += delta_t; //这里实现时间的改变

   updateGL();
}


相关文章: