我在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?或者我以某种方式清除指针?
答案 0 :(得分:1)
不确定这是否能解决您的问题,但您的glVertexPointer线应如下所示:
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVerts);
因为每个顶点有3个坐标。除此之外,你应该能够使用上面的方法设置一个新的指针。