作爲android和openGL 2.0 es的初學者,我正在測試簡單的東西並看看它是怎麼回事。使用setLookAtM方法的Android OpenGL怪異
我下載了樣本http://developer.android.com/training/graphics/opengl/touch.html。
我更改了代碼,檢查是否可以在(0,0,0)點(方形中心)周圍爲相機旋轉動畫。
所以我這樣做:
public void onDrawFrame(GL10 unused) {
// Draw background color
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
// Set the camera position (View matrix)
long time = SystemClock.uptimeMillis() % 4000L;
float angle = ((float) (2*Math.PI)/ (float) 4000) * ((int) time);
Matrix.setLookAtM(mVMatrix, 0, (float) (3*Math.sin(angle)), 0, (float) (3.0f*Math.cos(angle)), 0 ,0, 0, 0f, 1.0f, 0.0f);
// Calculate the projection and view transformation
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
// Draw square
mSquare.draw(mMVPMatrix);
}
我希望相機總是看向方(的(0,0,0)點)的中心,但是這不會發生什麼變化。相機確實是繞着廣場,但廣場上並沒有停留在屏幕的中央..而是沿移動X軸...:
我還預計,如果我們給eyeX和eyeY值相同的centerX和centerY,像這樣:
Matrix.setLookAtM(mVMatrix, 0, 1, 1, -3, 1 ,1, 0, 0f, 1.0f, 0.0f);
方將保持它的形狀(我的意思是,你的視野會被拖累,而是沿着這將是相同常到廣場上平面) ,但這也不會發生什麼:
這是我的投影矩陣:
float ratio = (float) width/height;
// this projection matrix is applied to object coordinates
// in the onDrawFrame() method
Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 2, 7);
這到底是怎麼回事?
是的,它的工作原理是這樣的,但現在輪換被綠色三角形「破壞」了(你知道,他們在教程中有這個三角形)。我看到了你的新問題,我一定會保留關注它。當我學習我的CG課程時,我已經完成了一個Matlab微型3d渲染器,我曾經很熟悉這些轉換。但現在,我有點生疏。這是令人困惑的,因爲有很多方法可以做到這一點。改變乘法的順序,轉置矩陣等。而且我不熟悉輔助函數足以突破這個在這一刻。順便說一下,有沒有打印矩陣功能可用? – jmacedo 2012-08-12 23:49:37
@joxnas:'Arrays.toString(matrix)' – Tim 2012-08-13 02:34:33
至於現在不工作的旋轉,有什麼線索? 它們具有: 'Matrix.setRotateM(mRotationMatrix,0,裂傷,0,0,-1.0F); Matrix.multiplyMM(mMVPMatrix,0,mRotationMatrix,0,mMVPMatrix,0);' 三角形圍繞旋轉古怪儘管如果我將投影矩陣設置爲Matrix.frustumM(mProjMatrix,0,-1,1,-1,1,2,7);而不是Matrix.frustumM(mProjMatrix ,0, - 比率,比率,-1,1,2,7)',當然屏幕偏斜。 我試着用乘法中的MVPMatrix交換旋轉矩陣,但沒有得到任何好的結果。 – jmacedo 2012-08-13 03:26:52