NeHe OpenGL第四十課 繩子的模擬

2021-09-03 06:56:04 字數 2293 閱讀 5996

nehe opengl第四十課:繩子的模擬

繩子的模擬:

怎樣模擬一根繩子呢,把它想象成乙個個緊密排列的點,怎麼樣有了思路了吧,在這一課你你將學會怎樣建模,簡單吧,你能模擬更多。

繩索模擬

在這個教程裡我們將模擬一段繩索,我們是在39課的基礎上進行的。

在物理模擬中,我們必須設定各個物理量,就像它們在自然界中的行為一樣。模擬中的運動並不一定和自然界相同,我們使用的運動模型,必須和我們需要模擬的目的有關,目的決定了它的精確度。要知道我們的目標不

是模擬原子和分子,也不是模擬成千上萬的粒子系。首先我們需要確定我們模擬的目標,才能建立我們的物理模型。它和下面內容相關:

1. 運動的數學表示

2. 執行模擬的計算機的速度

1. 運動的數學表示:

這個問題決定了我們使用何種數學方程來模擬運動,使用經典力學還是量子力學。

2. 執行模擬的計算機的速度:

計算機的速度決定了我們可以模擬的精度。

設計繩索的物理模型:

我們在經典力學和高於500mhz的計算機上模擬這個問題。首先我們需要設定需要的精度,我們使用一系列互相用彈簧連線的質點來模擬繩索,精度決定了我們用多少個點來模擬,當然越多越精確。在下面我決定用50或

100個點來模擬繩子一段3或4m長的繩子,換句話說,我們的模擬精度就是3到8厘公尺。

設計運動模型:

在繩子中,施加給各個質點的力來自於自身的質量和相連的內力(參見大學裡的普通力學)。如下我們用"o"表示質點,「—」表示連線質點的彈簧。

o----o----o----o

1    2    3    4

彈簧的力學公式如下:

力 = -k * x

k: 彈性係數

x: 相距平衡位置的位移

上面的公式說明,如果相鄰點的距離為平衡距離,那麼它們不受到任何力的作用。如果我們設定平衡位置為5cm,那麼100個點的繩子長5m。如果相連質點之間的位置小於5cm,它們受到排斥力。

上面的公式只是乙個基礎,現在我們可以加上摩擦力,如果沒有這項,那麼繩子將永遠動下去。

彈簧類:

這個類包含相連線的兩個物體,它們之間具有作用力。

class spring         

void solve()        // 計算各個物體的受力

springs = new spring*[numofmasses - 1];   

for (a = 0; a < numofmasses - 1; ++a)    //建立各個質點之間的模擬彈簧}

計算施加給各個質點的力 

void solve()        // 計算施加給各個質點的力

if (masses[a]->pos.y < groundheight)   // 計算地面對質點的作用

masses[0]->pos = ropeconnectionpos;    // 更新繩子的連線點和速度

masses[0]->vel = ropeconnectionvel;    }

void setropeconnectionvel(vector3d ropeconnectionvel)   

有了上面的類,我們可以很方便的模擬繩子,**如下: 

ropesimulation* ropesimulation =

new ropesimulation(

80,        // 80 質點

0.05f,        // 每個質點50g

10000.0f,        // 彈性係數

0.05f,        // 質點之間的距離

0.2f,        // 彈簧的內摩擦力

vector3d(0, -9.81f, 0),      // 萬有引力

0.02f,        // 空氣摩擦力

100.0f,        // 地面反作用係數

0.2f,        // 地面摩擦係數

2.0f,        // 地面緩衝係數

-1.5f);        // 地面高度

下面的**在程式中執行繩子的模擬 

float dt = milliseconds / 1000.0f;      // 經過的秒數

float maxpossible_dt = 0.002f;      // 模擬間隔

int numofiterations = (int)(dt / maxpossible_dt) + 1;    // 模擬次數

if (numofiterations != 0)       

dt = dt / numofiterations;      

NeHe OpenGL第四十一課 體積霧氣

nehe opengl第四十一課 體積霧氣 體積霧氣 把霧座標繫結到頂點,你可以在霧中漫遊,體驗一下吧。這一課我們將介紹體積霧,為了執行這個程式,你的顯示卡必須支援擴充套件 gl ext fot coord include include include include include nehegl...

NeHe OpenGL第四十五課 頂點快取

nehe opengl第四十五課 頂點快取 頂點快取 你想更快地繪製麼?直接操作顯示卡吧,這可是當前的圖形技術,不要猶豫,我帶你入門。接下來,你自己向前走吧。速度是3d程式中最重要的指標,你必須限制繪製的多邊形的個數,或者提高顯示卡繪製多邊形的效率。顯示卡最近增加了乙個新的擴充套件,叫做頂點快取vs...

NeHe OpenGL第四十六課 全屏反走樣

nehe opengl第四十六課 全屏反走樣 全屏反走樣 下面我們來介紹如何使用多重取樣,不向其他的擴充套件,我們在使用多重取樣時,必須在視窗建立時告訴它使用多重取樣,典型的步驟如下 1 建立乙個視窗 2 查詢是否支援多重取樣 3 如果支援刪除當前的視窗,使用支援多重取樣的格式建立視窗 4 如果我們...