2011-08-19 28 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