我正在使用OPENGL ES for iOS,但这可能适用于任何OPENGL场景; 我有一个顶点数组但只想绘制其中的一些。在下面的例子中,我想从第一点到第二点绘制一条线,然后是第四点到第五点。但是,绘制了“中间”第3个点,而不是第5个点。我很确定我错过了一些显而易见的东西,我很感激在正确的方向上轻推,谢谢!
float xy[] = {
10.0f, 10.0f,
110.0f, 10.0f,
210.0f, 210.0f,
310.0f, 210.0f,
110.0f, 120.0f,
210.0f, 310.0f
};
glClearColor(0.2f, 0.5f, 0.4f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
for(int i = 0; i < 2; i++) {
glEnableClientState(GL_VERTEX_ARRAY);
int from = (i * 6);
glVertexPointer(2, GL_FLOAT, 0, &xy[0]);
glDrawArrays(GL_LINE_STRIP, from, 4 );
glDisableClientState(GL_VERTEX_ARRAY);
};
答案 0 :(得分:3)
在你的代码中,你只需要在每次迭代中绘制2个顶点,而不是4. glDrawArrays的最后一个参数是顶点数,而不是组件(浮点数)。
此外,您可以在没有循环的情况下实现相同的结果,并且省力/代码/时间更少:创建一个索引数组,包含要绘制的顶点的索引,然后使用glDrawElements而不是glDrawArrays。
float xy[] = { ... };
int indices[] = { 0, 1, 3, 4 };
glClearColor(...);
glClear(...);
glVertexPointer(...);
glEnableClientState(...);
glDrawElements(GL_LINES, 4, GL_UNSIGNED_INT, indices);