2015-11-06 41 views
1

我讀了this教程aabb平面測試,並且我無法理解所述的「優化」aabb平面測試。測量軸對齊盒(AAB)的截錐相交

在 「幾何方法 - 測試盒II」,我明白了一切,直到這條線:

假設有其分量x,y和z XMIN 和XMAX之間變化的一個AAB; ymin和ymax;和zmin和zmax。 正頂點p的組件選擇如下:...

我也沒有得到後來的代碼。 我的AABB對象由它們的minVertex,maxVertex參數定義。

你能解釋我作者是什麼意思嗎?

回答

1

考慮以下圖片,其中對角線PS(假定)平行於normal向量(順便說一下,這是本教程稱爲AAB的情況)。這張照片代表了這個想法更易於解釋和理解的2D版本。

2D version of the problem

p-vertex是,根據定義,與該法線方向進一步對準的一個。這意味着,你必須決定哪些以下四個載體之一,還與正常排列:

R - Q, Q - R, P - S or S - P      (1) 

在這種情況下,答案是S - P,這意味着Sp-vertexPn-vertex。但問題是如何以編程方式檢測此問題。那麼,兩個向量之間的dot product就會測量其中一個向另一個向量的投影,所以問題可以重申爲:(1)中的哪個向量具有最大點積與正常的(xn, yn)

這裏有四點產品:

(xn, yn).(R - Q) = xn(x1 - x2) + yn(y1 - y2) 
(xn, yn).(Q - R) = xn(x2 - x1) + yn(y2 - y1) 
(xn, yn).(P - S) = xn(x1 - x2) + yn(y2 - y1) 
(xn, yn).(S - P) = xn(x2 - x1) + yn(y1 - y2) 

所以,我們正在尋找一個是使之和的兩方面積極的一個,這是

  • 如果xn > 0選擇x2 - x1>0)否則x1 - x2<0
  • if yn > 0 select y2 - y1>0),否則y1 - y2<0

的原因是標誌++ = +-- = +規則(。)

所有這一切都轉化爲

  1. 開始與p-vertex = (x1, y1)
  2. 如果xn > 0,改變x1x2(有效離開p-vertex = (x2, y1)
  3. 如果yn > 0,改變y1y2(有效離開p-vertex = (x*, y2)

(在步驟3中,x*x1x2取決於SETP 2的結果)

這些參數保持如果是在3個維度中有效。唯一的區別是你必須在每個地方添加z座標。

+0

有趣的是,我應該從作者寫的短代碼片段中理解這一切嗎? :P。謝謝! – Pilpel

+0

@Pilpel不要責怪作者。他們可能知道他們可以在令人驚歎的StackOverflow社區接力。實際上,每個作者都應該依靠它。 –