2016-04-04 116 views
0

我已經設法做一個小應用程序在android中使用opengl2。它由在矩形上移動的球體組成,兩者都具有紋理。這只是一個測試,我正在測試我在opengl中的第一步。翻譯矩陣適用於視圖矩陣不工作(android opengl2)

現在我正試圖將相機移到它上面。我將我的視圖矩陣乘以y軸上的旋轉矩陣。結果是好的,它正常工作。但是之後我想給鏡頭添加一個翻譯,所以我應用了一個翻譯矩陣,我認爲在這一步中我弄糟了一些東西,可能並不那麼簡單。該代碼是:(我認爲乘法是正確的順序,但不知道)

double x = 0.01; 
float[] matRotationY = {(float)Math.cos(x), 0, (float)Math.sin(x), 0, 
         0,1,0,0, 
         (float)-Math.sin(x), 0, (float)Math.cos(x), 0, 
         0,0,0,1}; 
float[] matTranslationY = {1,0,0,0, 
          0,1,0,-0.01f, 
          0,0,1,0, 
          0,0,0,1}; 


Matrix.multiplyMM(mViewMatrix, 0, matRotationY, 0, mViewMatrix, 0); 
Matrix.multiplyMM(mViewMatrix, 0, matTranslationY, 0, mViewMatrix, 0); 

如果你需要更多的代碼,告訴我,我會編輯的問題。對不起,如果這個問題有點愚蠢,我開始與它,一些建議會很好。

+0

你能以何種方式被搞砸描述明白了嗎?只是一個黑屏,或模型行爲奇怪? –

+0

模型行爲奇怪。視圖變窄,不讓我看到整個矩形 – takluiper

+0

嘗試調換'matTranslationY'矩陣,看看是否可行 –

回答

1

矩陣可以通過兩種不同的方式插入:列主要和行主要。 考慮下面的矩陣:

[ 1, 5 ] 
[ 0, 1 ] 

把它在一個float[]像你一樣把它存儲在內存中,例如:

{ 1, 5, 0, 1 } 

所以基本上,每兩個連續的數字形成一個矩陣行 - 這是以行主格式存儲它。

但是,使用乘法函數,即Matrix.multiplyMM使用每一組連續的數字作爲列的矩陣 - 所以{1,5,0,1}變爲

[ 1, 0 ] 
[ 5, 1 ] 

通知它是原始示例矩陣的鏡像版本。


因此,特別是在你的情況,

[ 1, 0, 0, 0  ] 
[ 0, 1, 0, -0.01 ] 
[ 0, 0, 1, 0  ] 
[ 0, 0, 0, 1  ] 

Matrix.multiplyMM

[ 1, 0, 0, 0  ] 
[ 0, 1, 0, 0  ] 
[ 0, 0, 1, 0  ] 
[ 0, -0.01, 0, 1 ]