2009-08-23 64 views
2

我正在寫一個物理模擬使用OgreMOC檢測網格和球體之間的碰撞點?

我有一個球體,可以從相機的位置拍攝,並通過使用相機的前向矢量在相機朝向的方向移動。

我想知道如何檢測我的球體和另一個網格物體之間碰撞的

如何使用MOC或OGRE檢查兩個網格物體之間的碰撞點?

更新:應該早一點提及。我無法使用第三方物理庫,因爲我們需要自己開發這個(uni項目)。

回答

2

我認爲最好的方法是使用專門的物理庫。

這就是說。如果我想到這個問題,我會懷疑這並不難:

球體有一箇中點和一個半徑。對於網格中的每個點執行以下操作:

  1. 檢查點是否位於球體內部。
  2. 如果它不檢查,如果它是更接近中心比以前發現點(如果有的話)
  3. 如果這樣做......存儲這個點作爲碰撞點

當然,這個例程會相當緩慢。 有幾件事情,以加快速度:

  1. 的第一瑣碎拒絕,先看看網的包圍球碰撞
  2. 檢查距離時,不calc下的squareroots ...使用長度平方來代替。(要快得多)
  3. 而不是比較網格的每個點,使用維空間分割算法(四叉樹/ BSP)的網格,以迅速排除點組

啊......和這個例程只適用於球體不能行進得太快(r精確到網格)。如果它的傳播速度非常快,並且每秒對它進行X次採樣,那麼球體就會在網格中飛行,而不會發生每次碰撞。爲了克服這個問題,你必須使用「掃描體積」,它基本上使你的球體成爲一個管。使數學成倍地複雜化。

+3

如果您的網格相對於您的球體較大,您可以在連接邊緣與球體相交的球體外部獲得2個點。當然,如果你不明白這一點,那麼你可以做點球測試。 – geofftnz 2009-08-25 03:34:48

8

這裏公認的解決方案不起作用。如果網格密度通常足夠高,以至於網格上的兩個點都不會比碰撞球的直徑更遠,那麼它只會進行一些工作。想象一下,在一個胡格立方體網格上的一個隨機矢量的近距離發射的小球體。立方體網格只有8個垂直。立方體實際上會碰到這8個頂點之一的機率是多少?

這確實需要與每個多邊形碰撞完成。你需要能夠檢查多邊形和一個球體的交點(並且如果你想避免隧道重複提到的話,還需要一個圓柱體)。在線和書本形式有相當多的資源,但http://www.realtimerendering.com/intersections.html可能是一個有用的起點。

有關優化的評論很好。早期的機會(可能是對邊界球的快速檢查或網格的軸對齊邊界體積)是必不可少的。即使您確定自己處於邊界範圍之內,從潛在候選人列表中清除不太可能的多邊形(面對錯誤方向等等)也可能是個好主意。

+0

謝謝你指出這一點。我完全錯過了這個案子。但對於網格和球體大小相似或球體較大的解決方案,他可以正確工作嗎? – Toad 2009-08-26 06:40:40

+0

@Toad對於這種解決方案,與邊界球體的交點可以工作。 – AgentFire 2012-02-25 16:34:30