如何在android上更新顶点缓冲区?

时间:2015-03-13 08:35:11

标签: java android opengl-es

我无法更新android上的顶点信息。基本上,FloatBuffer最初包含一个立方体的形状,但我想在按下的按钮上变换这个形状,所以我必须在每次按下UI按钮时更新顶点值。我使用以下函数来更改FloatBuffer

public float increment(float value)
    {
        float v = 0.0f;
        for(int i = 0; i < boxf.length; i++)
        {
            if(i % 3 == 2 && boxf[i] > 0.0f)
            {
                this_boxf[i] += value;
                box.put(i, this_boxf[i]);
                v = box.get(i);
            }
        }
        return v;
    }

这是绘图功能:

public void draw(GL10 gl) {
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);

        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, box);
        gl.glNormalPointer(GL10.GL_FLOAT,0, normals);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);
            gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glDisableClientState(GL10.GL_NORMAL_ARRAY);
    }

多维数据集显示正确,但当我尝试更改其FloatBuffer时,没有任何更改。我在google上阅读,似乎我必须使用glBufferData。但是,GL10没有这样的功能。我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

如果渲染模式设置为RENDERMODE_WHEN_DIRTY,那么只有在视图失效或调用requestRender()时才会调用draw()函数,因此在更新时不会看到任何更改你的顶点缓冲区。

为了查看您的更改,您可以将渲染模式设置为RENDERMODE_CONTINUOUSLY,或者在更新顶点缓冲区后在GLSurfaceView对象上调用requestRender()。