如何在 android 上更新顶点缓冲区?
How to update vertex buffer on android?
我无法更新 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
没有这样的功能。我将如何做到这一点?
如果您的渲染模式设置为 RENDERMODE_WHEN_DIRTY
,则仅当视图无效或调用 requestRender() 时才会调用 draw() 函数,因此您不会看到任何变化你更新你的顶点缓冲区。
为了查看您的更改,您可以将渲染模式设置为 RENDERMODE_CONTINUOUSLY
或者在更新顶点缓冲区后调用 GLSurfaceView
对象上的 requestRender()。
我无法更新 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
没有这样的功能。我将如何做到这一点?
如果您的渲染模式设置为 RENDERMODE_WHEN_DIRTY
,则仅当视图无效或调用 requestRender() 时才会调用 draw() 函数,因此您不会看到任何变化你更新你的顶点缓冲区。
为了查看您的更改,您可以将渲染模式设置为 RENDERMODE_CONTINUOUSLY
或者在更新顶点缓冲区后调用 GLSurfaceView
对象上的 requestRender()。