我正在寫一個物理模擬使用Ogre和MOC。檢測網格和球體之間的碰撞點?
我有一個球體,可以從相機的位置拍攝,並通過使用相機的前向矢量在相機朝向的方向移動。
我想知道如何檢測我的球體和另一個網格物體之間碰撞的點。
如何使用MOC或OGRE檢查兩個網格物體之間的碰撞點?
更新:應該早一點提及。我無法使用第三方物理庫,因爲我們需要自己開發這個(uni項目)。
我正在寫一個物理模擬使用Ogre和MOC。檢測網格和球體之間的碰撞點?
我有一個球體,可以從相機的位置拍攝,並通過使用相機的前向矢量在相機朝向的方向移動。
我想知道如何檢測我的球體和另一個網格物體之間碰撞的點。
如何使用MOC或OGRE檢查兩個網格物體之間的碰撞點?
更新:應該早一點提及。我無法使用第三方物理庫,因爲我們需要自己開發這個(uni項目)。
我認爲最好的方法是使用專門的物理庫。
這就是說。如果我想到這個問題,我會懷疑這並不難:
球體有一箇中點和一個半徑。對於網格中的每個點執行以下操作:
當然,這個例程會相當緩慢。 有幾件事情,以加快速度:
啊......和這個例程只適用於球體不能行進得太快(r精確到網格)。如果它的傳播速度非常快,並且每秒對它進行X次採樣,那麼球體就會在網格中飛行,而不會發生每次碰撞。爲了克服這個問題,你必須使用「掃描體積」,它基本上使你的球體成爲一個管。使數學成倍地複雜化。
這裏公認的解決方案不起作用。如果網格密度通常足夠高,以至於網格上的兩個點都不會比碰撞球的直徑更遠,那麼它只會進行一些工作。想象一下,在一個胡格立方體網格上的一個隨機矢量的近距離發射的小球體。立方體網格只有8個垂直。立方體實際上會碰到這8個頂點之一的機率是多少?
這確實需要與每個多邊形碰撞完成。你需要能夠檢查多邊形和一個球體的交點(並且如果你想避免隧道重複提到的話,還需要一個圓柱體)。在線和書本形式有相當多的資源,但http://www.realtimerendering.com/intersections.html可能是一個有用的起點。
有關優化的評論很好。早期的機會(可能是對邊界球的快速檢查或網格的軸對齊邊界體積)是必不可少的。即使您確定自己處於邊界範圍之內,從潛在候選人列表中清除不太可能的多邊形(面對錯誤方向等等)也可能是個好主意。
如果您的網格相對於您的球體較大,您可以在連接邊緣與球體相交的球體外部獲得2個點。當然,如果你不明白這一點,那麼你可以做點球測試。 – geofftnz 2009-08-25 03:34:48