2016-05-29 37 views
0

我試圖理解一些可能比我現在想的要容易得多的東西,所以希望有人能夠幫助我理解我在下面描述的內容。球體/平截體重疊測試的選擇

我知道,如果一個球體完全位於3D的六個平截頭體平面(左,右,底部,頂部,近遠)中的至少一個後面,那麼它就位於視錐體之外。在下面的例子中,對於以中心c2爲圓心的圓,這完全在左平面外。重疊測試簡單地通過將球的中心座標插入平面方程來獲得從中心到平面的距離,然後將其與球的半徑進行比較來完成。

但是,在中心c1的球體上使用這種方法會給我們一個誤報,因爲測試會告訴我們球體在右和遠平面內(如果從上面看)。然後,解決方案通過確定從球體中心到最接近它的視錐的角部的距離來使用更精確的重疊測試。如果這個距離小於半徑越大,球體外面的圓臺等

Spheres and viewing frustum

我不明白的是,如果我們使用第二種方法,尋找在角落,而不是飛機,在像中心c3那樣的球體上。測試不會讓我們知道從球體中心到半徑的距離大於0,因此超出觀察體積?

所以,如果我給出了一套正交視圖體的規則,即0≤x≤20,-5≤15,-5≤z≤18,並且x,y,z-座標+球的半徑並告知確定該球體是在其內部還是外部。我如何選擇使用什麼方法才能真正獲得正確答案?

回答

1

其實你既需要:

  1. 你必須檢查測試球是否相交/截在裏面(6面) - 你的first approach
  2. 然後(如果1爲真)且距離爲< -R - 球完全在裏面。
  3. 否則,您必須檢查交點座標平面上(如果至少一個red橫在你的black段你有路口): 實施3 enter image description here

可能會非常棘手,因此,這裏有兩個環節:

http://www.realtimerendering.com/intersections.html http://www.geometrictools.com/Source/Intersection3D.html

在哪裏可以找到Frustrum-Sphere相交算法。

geometrictools實現使用FindMinDistance算法比較複雜。您可以檢查它們的實現(Wm5DistPoint3Frustum3.cpp)並將其僅適用於itersection。

+0

這很有道理,現在我明白了。謝謝! –