GL11(Android)中的getFloatv函数问题

时间:2011-08-19 18:02:25

标签: android opengl-es

我正在学习Open GL ES,并且希望获得比使用谷歌TouchRotateActivity sample中建议的3D对象更直观的界面。 为了做到这一点,我想将Modelview矩阵乘以前一状态的ModelView矩阵。

但是我遇到了以下问题: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);
}

提前谢谢。

2 个答案:

答案 0 :(得分:0)

我不用Java编程,所以我知道,你的问题可能就是将内存传递给glGetFloatv的方式。无论如何,我发现this page漂浮在那里,也许它会帮助你。

答案 1 :(得分:0)

根据您的设备,您可能正在使用PixelFlinger软件GL渲​​染器,遗憾的是,至少从版本1.2开始,它没有实现glGetFloat。如果是这种情况,检查logcat输出应该显示此效果的消息。

解决方案是自己处理矩阵,因此首先不需要从OpenGL中检索它们。 Like so