2017-04-02 62 views
1

我想用Bullet和OpenGL製作一個基本的第一人稱射擊遊戲。我遇到了我的剛體不能高速碰撞的問題。子彈 - 剛體不高速碰撞?

我的子彈會穿過我有的任何其他剛體,比如牆壁。將速度降低到10以下會導致碰撞,但對於移動的子彈來說這太低。子彈也瘋狂地快速移動(我知道這是一顆快速移動的子彈,但有時我甚至無法看到它,不知道是否應該這樣)。

我在想這是如何進行模擬?閱讀它讓我感到困惑。我該如何做到這一點,以便我的物體始終會發生碰撞(至少在合理快速的情況下),並且如果可能的話,是否有辦法減慢模擬速度,同時保持正確的子彈速度等等,以便我可以真正看到子彈移動和碰撞?

+0

這是在Unity? –

+0

你如何檢測代碼中的衝突? –

+0

不在Unity中,只是使用OpenGL和Bullet的C++代碼。爲了檢測碰撞,我只是讓Bullet處理它,我沒有碰撞標誌。我相信Bullet在默認情況下會處理碰撞(看Bullet的落球教程),而且我的子彈在相對較慢行駛時會與牆壁,地板等發生碰撞(例如,它們會掉到地板上,並停留在地板上) –

回答

1

下面是要解決的一些方法: -
它是從How can I avoid missing collisions for fast moving objects? - an official FAQ

  • 小時間步長
  • 複製擠出對象沿着運動
  • 光線投射到新的位置
  • 掃描碰撞測試(凸面鑄造,線性鑄造)
  • 連續碰撞檢測,包括旋轉運動

請閱讀的鏈接更多的細節。這不是一個微不足道的問題。
在嘗試任何事情之前要問的一件重要事情:你真的需要高速物體嗎?
它不是免費的(花費更多的CPU)。

這裏是另一個有用的鏈接(用處不大,雖然):https://gamedev.stackexchange.com/questions/11961/how-can-i-enable-ccd-in-bullet-physics

+0

有趣的,很多可能的解決方案,謝謝。我會將您的標記標記爲現在,並且可能會在此處發佈我的解決方案。我確實需要高速的物體,因爲它們是子彈,並且由於我試圖實現的目標,射線投射到某個位置不是一種選擇。 –

+1

其實@javaLover是你建議中的最後一點,它是一個快速而簡單的修復,使用連續碰撞檢測是一個好方法。對於此問題的任何其他人,請嘗試以下內容:\t \t \t bulletRigidBody-> setCcdMotionThreshold(1e-7); bulletRigidBody-> setCcdSweptSphereRadius(0。50); –

+0

@Jack Phipps非常感謝您分享一個片段。這對許多人來說真的很有用。 – javaLover