2011-08-19 56 views
0

我學習的Open GL ES並想獲得與一個比在TouchRotateActivity sample由谷歌提出的3D對象更直觀的界面。 爲了做到這一點,我想在我以前的狀態ModelView矩陣乘以我的模型視圖矩陣。問題與GL11(安卓)getFloatv功能

但我遇到了以下問題:getFloatv函數在我的float數組中返回0值,我不明白爲什麼(我的ModelView矩陣不是空的:如果是這樣,我不會在屏幕上獲得我的多維數據集)。

有人能幫我弄清楚是什麼問題嗎?以下是代碼中的更改。

private float[] previous; 

public CubeRenderer() { 
    mCube = new Cube(); 
    previous = new float[16]; 
} 

public void onDrawFrame(GL10 gl) { 
    GL11 gl11 = (GL11) gl; 

    gl11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); 

    gl11.glMatrixMode(GL11.GL_MODELVIEW); 
    gl11.glLoadIdentity(); 
    gl11.glTranslatef(0, 0, -3.0f); 
    gl11.glRotatef(mAngleX, 0, 1, 0); 
    gl11.glRotatef(mAngleY, 1, 0, 0); 

    gl11.glEnableClientState(GL11.GL_VERTEX_ARRAY); 
    gl11.glEnableClientState(GL11.GL_COLOR_ARRAY); 

    /*if(!previous.equals(new float[16])) 
     gl11.glMultMatrixf(previous, 0);*/ 
    gl11.glGetFloatv(GL11.GL_MODELVIEW_MATRIX, previous, 0); 

    Log.d("taille matrice",Integer.toString(previous.length)); 
    for(int i=0; i<previous.length;i++) 
     Log.d(Integer.toString(i),Float.toString(previous[i])); 

    mCube.draw(gl11); 
} 

在此先感謝您。

回答

0

根據您的設備可能會使用PixelFlinger軟件GL渲​​染,不幸的是沒有實現glGetFloat,至少爲1.2版本。如果出現這種情況,檢查logcat輸出應該會顯示消息。

解決的辦法是自己處理矩陣,所以沒有必要在第一時間從OpenGL的檢索。 Like so

+0

這是正確的,我在我打電話的未實現的方法logcat的發現。我發現了另一種通過使用Google提供的API演示中實現的類來獲取矩陣的解決方案。 [這是](http://www.41post.com/1540/programming/android-opengl-get-the-modelview-matrix-on-15-cupcake)。 非常感謝您的幫助。 – Trap

0

我不JAVA程序,所以就我所知,您的問題可能是在內存被傳遞到glGetFloatv的方式。無論如何,我發現this page漂浮在那裏,也許它會幫助你。

+0

謝謝你的建議,但是當我檢查FloatBuffer這是相同的:只有0值內:/ – Trap