我正在移動物理引擎中的角色(橢球體)。運動必須受到靜態幾何的約束,但應在邊緣滑動,以免卡住。碰撞檢測,「推出」的替代方案
我目前的做法是稍微移動它,然後將它從幾何圖形中推回。這似乎有效,但我認爲這主要是因爲運氣。我擔心這種方法會出現混亂的情況。例如,一個尖銳的角落,兩個牆壁將角色推向彼此。
「最先進的」遊戲引擎如何解決這個問題?
我正在移動物理引擎中的角色(橢球體)。運動必須受到靜態幾何的約束,但應在邊緣滑動,以免卡住。碰撞檢測,「推出」的替代方案
我目前的做法是稍微移動它,然後將它從幾何圖形中推回。這似乎有效,但我認爲這主要是因爲運氣。我擔心這種方法會出現混亂的情況。例如,一個尖銳的角落,兩個牆壁將角色推向彼此。
「最先進的」遊戲引擎如何解決這個問題?
我還沒有開發出一種最先進的遊戲引擎,但我曾經寫過一款賽車遊戲,通過逆轉模擬時間和計算邊緣交叉的位置來簡單處理碰撞。然後汽車被允許反彈回遊戲場。懲罰是控制器被禁用,直到汽車停止。所以我的建議是運行你的物理引擎來精確計算邊緣被擊中的位置(它可能需要一些非線性方程求解的方法),然後你改變你的速度矢量來反彈或跟隨邊緣。
在防止角落案件的情況下,可以始終保持遊戲中的最後有效位置的歷史和物理引擎的狀態。如果遊戲卡住了,那麼模擬可以從該點重新開始,但具有不同的條件(例如通過向內部參數添加一些隨機化)。
找到一些答案。您好,Ernelli,感謝您的建議。在碰撞的確切時間停止時間似乎是一個好主意。我擔心數學對於一般解決方案來說太棘手,因爲對象可以旋轉。然而,對於這個特定的情況(橢球與靜態幾何),我想我可以管理數學。 – LaZe 2010-04-06 09:12:56
考慮使用第三方物理庫,如Chipmunk-physics或Box2D。當涉及到遊戲物理時,超出最基本的東西可能會非常複雜,並且不需要重新發明輪子。
通常您提到的問題是通過確定重疊量,接觸點和表面法線(例如,通過使用分離軸定理)來解決的。然後計算並應用脈衝,這會改變物體的速度,以便在下一次迭代中物體以物理上逼真的方式分開。
就像SO社區一樣,您也可以在http://www.gamedev.net/ – 2010-04-06 08:31:16