基於脈衝的物理 - 在輕物體上堆疊重物體 (Impulse based physics - Stacking heavy object on light object)


問題描述

基於脈衝的物理 ‑ 在輕物體上堆疊重物體 (Impulse based physics ‑ Stacking heavy object on light object)

我正在開發一個基於脈衝的物理引擎,但我遇到了質量差異較大的物體的問題。

引擎在每一幀都應用脈衝來處理碰撞。脈沖在每對碰撞對象之間進行多次迭代。如果物體的質量大致相同,這很有效。

但問題是,當將重物體放在輕物體上時,重物體會迫使輕物體進入地面。

問題的原因是,施加在兩個物體之間的衝力太小,所以即使經過多次迭代,也不足以抵消重物上的重力。

p>

我相信有辦法準確計算所需的衝動,但我擔心它' 太複雜了?所以我主要是在尋找一些技巧來解決這個問題,但不會改變引擎的工作方式。

感謝您的任何想法!


參考解法

方法 1:

Google for 'Shock propagation', the basic idea is that you sort your contacts in the direction of gravity (usually along the 'y' axis) and during contact resolution you freeze the lower bodies (assign to them infinite mass, that is, invMass = 0.0f and invInertiaTensor should be a zero matrix) so that they don't 'sink'. I haven't implemented that, i'm struggling with my own crappy physics engine.

(by LaZeuser521328)

參考文件

  1. Impulse based physics ‑ Stacking heavy object on light object (CC BY‑SA 3.0/4.0)

#game-physics #physics






相關問題

Android AndEngine:簡單的精靈碰撞 (Android AndEngine: Simple sprite collision)

Box2D - 收集硬幣 (Box2D - collect a coin)

LibGDX - 只有可拖動的運動 (LibGDX - only draggable movement)

Swift 2 中的遊戲 - “touchesBegan”? (Game in Swift 2 - "touchesBegan"?)

SKCameraNode 跟不上移動節點 (SKCameraNode doesn't keep up with moving node)

2D 平台遊戲:為什麼讓物理依賴於幀率? (2D platformers: why make the physics dependent on the framerate?)

基於脈衝的物理 - 在輕物體上堆疊重物體 (Impulse based physics - Stacking heavy object on light object)

建造一堵提高速度統一的牆 (Make a wall that boost speed unity)

Unity Golf 遊戲物理和運動控制器 (Unity Golf game physics and movement controller)

在 2D 汽車遊戲中模擬下壓力 (Simulate Downforce in a 2D Car Game)

向前和橫向球員運動 (Forward and Sideways Player movement)

如何在 Unity 中進行沒有物理的碰撞檢測? (How to have collision detection without physics in Unity?)







留言討論