Android 重复调用glVertexPointer和glDraw

Android 重复调用glVertexPointer和glDraw,android,opengl-es,Android,Opengl Es,我在Android上使用OpenGL ES绘制一些形状,所以我有一些模型类从.obj文件加载顶点等 然后,每个模型都有一个onDrawFrame()方法,渲染器调用该方法将其放置在场景中 public void onDrawFrame(GL10 gl) { gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnable(GL10.GL_CULL_FACE); gl.glFrontFace(GL10.GL_CCW);

我在Android上使用OpenGL ES绘制一些形状,所以我有一些模型类从.obj文件加载顶点等

然后,每个模型都有一个onDrawFrame()方法,渲染器调用该方法将其放置在场景中

public void onDrawFrame(GL10 gl) {
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnable(GL10.GL_CULL_FACE);
    gl.glFrontFace(GL10.GL_CCW);
    gl.glCullFace(GL10.GL_BACK);
    gl.glVertexPointer(0, GL10.GL_FLOAT, 0, mVerts);
    gl.glDrawElements(GL10.GL_TRIANGLES, mFaces.capacity(), GL10.GL_UNSIGNED_BYTE, mFaces);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
我现在的困惑是在哪里“重置”顶点指针(我想),因为如果我尝试使用2个新的顶点从一个新的GLVERTExpinter创建一条任意线,并使用这些id调用GLDROULEments(GL_线),该线似乎总是使用原始数据中的顶点0和1


我是否需要在主场景以某种方式跟踪的一个主GLVERTExpinter中预先定义所有场景的顶点,并让每个模型只调用具有适当偏移量的GLDREEMENTS?还是以某种方式清除指针?

不确定这是否能解决您的问题,但您的glVertexPointer行应该如下所示:

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVerts);

因为每个顶点有3个坐标。此外,您应该能够使用上述方法设置新指针。

Hmm,好的,谢谢。那么,它一定是我模型类层次结构的其他部分中出现的问题。(glVertexPointer行在我的类层次结构中隐藏得更深一些,因此在运行的代码中是正确的)我将运行一些测试,并尝试缩小它的范围。是的,您是否正在进行纹理或颜色指定?您应该将所有这些代码放在onDrawFrame中,以便更容易维护一致的状态,我确实遇到了一些问题,忘记了禁用/启用指针。