2013-05-17 64 views
1

我想做域剔除了我的引擎:)如何確定球是在飛機前

this site似乎是很好的例子,如何做到這一點,但有一件事我不明白:

if (D3DXPlaneDotCoord(&m_frustum[i], pPosition) + radius < 0) 
     { 
      // Outside the frustum, reject it! 
      return FALSE; 
     } 

是爲什麼有一個半徑爲? 或者,也許點產品和飛機距離之間的依賴關係?

原因與我的實際知識,我會這樣計算: 計算飛機的點積。而且,隨着矢量的歸一化,點積等於矢量之間夾角的餘弦。所以它可以返回-1和1之間的值(這就是爲什麼我不明白爲什麼添加半徑)。如果cos> 0表示角度在0到90度之間。所以中心點在飛機前面。然後我會使用公式來計算飛機上的點距離。並檢查該距離是否高於球體半徑。但是這個人有這個方程。有什麼魔法呢?

好的我看到我的錯誤點的處理不等於角度的cos,但角度的cos和向量P的長度(描述球體的中心的位置)。那麼究竟什麼是cos*|P| = ? http://tinypic.com/r/2vxrpkw/5(用於圖像無REP) 大概回答了自己的問題BRB(維基百科):)

呀究竟。我的P不是座標系中的P點,而是P點已知的平面點。所以它是飛機的點和知道點之間的向量。一切似乎都合法。感謝您的幫助:P這裏很好地解釋了這一點:www.songho.ca/math/plane/plane.html

回答

0

這可以看作是pPosition沿着飛機正常的投影。

如果該投影的長度加上平面的D分量減去球體半徑小於零意味着球體落後。

相關問題