[圖形學] 模擬小球自由落體

完整代碼鏈接: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();
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章