完整代碼鏈接:https://github.com/kaiwu119/BallFreeFallAnimation
計算機動畫經常用於描述一些自然界的物理運動, 本文介紹如何實現動態過程的模擬。
演示程序: 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();
}