glVertexPointer - 绘制不需要的线条

时间:2011-05-13 12:36:45

标签: iphone ios opengl-es

我正在使用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);

    };

1 个答案:

答案 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);