2015-11-05 40 views
0

我有三個立方體在我的3D場景中旋轉。我想要實現的是計算哪一個(如果有的話)被按下的立方體。在gluUnproject中使用哪個modelView?

我想我明白gluUnproject是如何工作的,我只需要運行gluUnproject兩次,一次用於近平面,一次用於遠平面以及什麼。我唯一的問題是瞭解使用哪個modelView。

的函數原型看起來像這樣(我開發Android):

public static int gluUnProject (float winX, float winY, float winZ, 
           float[] model, int modelOffset, 
           float[] project, int projectOffset, 
           int[] view, int viewOffset, 
           float[] obj, int objOffset) 

我不明白的是什麼模型視圖矩陣我應該使用的第四個參數。我是否必須使用每個立方體的modelView矩陣爲每個立方體計算一次光線?

回答

0

我必須使用每個立方體的modelView矩陣爲每個立方體計算一次射線嗎?

這真的取決於你要測試光線。如果你想在自己的局部座標系統(即在本地座標系中以0,0,0爲中心的立方體)測試每個立方體的射線,那麼,是的,你必須取消投射每個單獨的立方體(說實話,如果這是你想要的要做的事情,你應該看看Plücker coordinates這很大程度上簡化了這種測試;但是,那麼你可能應該使用Plücker座標來進行射線相交測試)。

如果要針對世界座標中的幾何進行測試,那麼在應用單個模型轉換之前,當您在構建模型視圖時(即在視圖轉換之後)到達世界舞臺時,您需要使用模型視圖矩陣。

+0

我確實想在世界空間測試幾何圖形,但我無法理解你在說什麼。每次繪製框架時,視圖矩陣和視圖投影矩陣都會在我的Renderer類中計算出來,然後像這樣輸入到多維數據集:cube1.draw(mViewProjectionMatrix,mViewMatrix)。然後每個立方體自己計算MVP矩陣(使用其個人模型矩陣)並將其作爲統一信息提供給着色器。當我計算來自Renderer類的射線時,應使用哪個矩陣? –

+0

@AbuHassan:傳遞渲染器類提供的視圖和投影矩陣。然而,既然你得到了一個預乘投影視圖(它只有很少的用處),你首先要乘以視圖部分。如果投影視圖PV = P·V,其中P =投影,則可以通過r乘以視圖的逆來檢索原始P:P = PV·inv(V);即您必須先倒置視圖矩陣。 – datenwolf

+0

@阿布哈桑:我得到的印象是,你對整個轉型鏈的工作原理只有一種模糊的理解。我強烈建議你研究一下線性代數的知識,如何使用矩陣以及矩陣如何用作線性算子。憑藉這些知識,事情變得更加容易。 – datenwolf