2010-04-06 29 views
4

我正在移動物理引擎中的角色(橢球體)。運動必須受到靜態幾何的約束,但應在邊緣滑動,以免卡住。碰撞檢測,「推出」的替代方案

我目前的做法是稍微移動它,然後將它從幾何圖形中推回。這似乎有效,但我認爲這主要是因爲運氣。我擔心這種方法會出現混亂的情況。例如,一個尖銳的角落,兩個牆壁將角色推向彼此。

「最先進的」遊戲引擎如何解決這個問題?

+1

就像SO社區一樣,您也可以在http://www.gamedev.net/ – 2010-04-06 08:31:16

回答

1

我還沒有開發出一種最先進的遊戲引擎,但我曾經寫過一款賽車遊戲,通過逆轉模擬時間和計算邊緣交叉的位置來簡單處理碰撞。然後汽車被允許反彈回遊戲場。懲罰是控制器被禁用,直到汽車停止。所以我的建議是運行你的物理引擎來精確計算邊緣被擊中的位置(它可能需要一些非線性方程求解的方法),然後你改變你的速度矢量來反彈或跟隨邊緣。

在防止角落案件的情況下,可以始終保持遊戲中的最後有效位置的歷史和物理引擎的狀態。如果遊戲卡住了,那麼模擬可以從該點重新開始,但具有不同的條件(例如通過向內部參數添加一些隨機化)。

+0

找到一些答案。您好,Ernelli,感謝您的建議。在碰撞的確切時間停止時間似乎是一個好主意。我擔心數學對於一般解決方案來說太棘手,因爲對象可以旋轉。然而,對於這個特定的情況(橢球與靜態幾何),我想我可以管理數學。 – LaZe 2010-04-06 09:12:56

2

考慮使用第三方物理庫,如Chipmunk-physics或Box2D。當涉及到遊戲物理時,超出最基本的東西可能會非常複雜,並且不需要重新發明輪子。

通常您提到的問題是通過確定重疊量,接觸點和表面法線(例如,通過使用分離軸定理)來解決的。然後計算並應用脈衝,這會改變物體的速度,以便在下一次迭代中物體以物理上逼真的方式分開。

+0

嗨atis,我已經得到了物理與分離軸碰撞檢測的凸面網格和基於脈衝的摩擦碰撞響應。我真的很想自己做所有這些細節。這是一個愛好項目,所以我的首要任務是學習和編寫一些有趣的東西。 :-) – LaZe 2010-04-06 16:55:39

+0

很酷,哦,你正在做3d。順便說一句,當兩個碰撞同時解決時,在其他物理引擎中看到「工件」並且以幾乎相反的方向移動物體,這會使物體反彈一點。阻尼和摩擦減輕了這些影響,但它確實存在,我想很難很好地處理。 – atis 2010-04-07 09:36:10