2015-10-17 33 views
0

我目前正在調試和改進我大部分完整的物理引擎。我意識到,爲了一款遊戲的目的,現有的引擎通常都是可行的,但是編寫任何類型實用引擎的經驗和自我滿足讓我至少可以說是欣喜若狂。到目前爲止,我已經設法構建了一個2D引擎,支持具有旋轉和摩擦的圓形和矩形。它在低應力情況下與大多數2D物理引擎相當,但在高應力下在接縫處迅速分解。例如,當一個長方形倒塌塔倒塌時,現在多個部件之間直接相互作用,其間具有很高的力量。我的引擎會嘗試將對象中的每個碰撞逐個分開,但有時候,當引擎將一對物體彼此推開時,它會將一個或兩個物體推入其他物體,從而加劇問題。就這樣,對象會得到擺佈和振動的發動機經過在它的頭是這樣的:關於線性投影的自制物理引擎問題

  1. 哎呀,物體A被挖成對象B.將兩個B,距離成目標C.
  2. 糟糕,對象B現在挖掘到對象C移動b遠並進入對象A.
  3. 重複1.

很多時候,此方法可以在單次迭代中出現多次,以便解決當碰撞對於一對,引擎有時會在另一對「撤銷」其分辨率。我曾嘗試在網絡上搜索物理引擎教程和信息,但所有這些都幾乎涵蓋了我已經掌握和運行的東西。有人提到解決碰撞是一系列事件,但從未詳細闡述過。有什麼方法可以解決這個問題嗎?

回答

0

你的問題可能在於你如何應用你的碰撞解決方案。我懷疑你正在做的線沿線的東西:這裏

ResolveCollision(ObjA, ObjB) 
{ 
    //calculate necessary velocity/force for separation. 

    ObjA.SetVelocity(newVel); 
    ObjB.SetVelocity(-newVel); 
} 

問題是,在你的榜樣,第二階段將覆蓋從第1階段不擅長的新速度。你想要的是將你的新速度添加到現有的速度。

理想情況下,我們希望看到一些代碼,但這是我最初的懷疑。