我有三個立方體在我的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矩陣爲每個立方體計算一次光線?
我確實想在世界空間測試幾何圖形,但我無法理解你在說什麼。每次繪製框架時,視圖矩陣和視圖投影矩陣都會在我的Renderer類中計算出來,然後像這樣輸入到多維數據集:cube1.draw(mViewProjectionMatrix,mViewMatrix)。然後每個立方體自己計算MVP矩陣(使用其個人模型矩陣)並將其作爲統一信息提供給着色器。當我計算來自Renderer類的射線時,應使用哪個矩陣? –
@AbuHassan:傳遞渲染器類提供的視圖和投影矩陣。然而,既然你得到了一個預乘投影視圖(它只有很少的用處),你首先要乘以視圖部分。如果投影視圖PV = P·V,其中P =投影,則可以通過r乘以視圖的逆來檢索原始P:P = PV·inv(V);即您必須先倒置視圖矩陣。 – datenwolf
@阿布哈桑:我得到的印象是,你對整個轉型鏈的工作原理只有一種模糊的理解。我強烈建議你研究一下線性代數的知識,如何使用矩陣以及矩陣如何用作線性算子。憑藉這些知識,事情變得更加容易。 – datenwolf