重复调用glVertexPointer和glDraw

时间:2010-08-31 20:11:57

标签: android opengl-es

我在Android上使用OpenGL ES来绘制一些形状,所以我有一些Model类来从.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个新顶点从新的glVertexPointer创建一个任意行,并使用这些id调用glDrawElements(GL_LINES),该行似乎始终使用原始数据中的顶点0和1。

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

1 个答案:

答案 0 :(得分:1)

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

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

因为每个顶点有3个坐标。除此之外,你应该能够使用上面的方法设置一个新的指针。