glVertexPointer - нарисованные нежелательные линии - PullRequest
0 голосов
/ 13 мая 2011

Я использую OPENGL ES для 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 Ответ

3 голосов
/ 13 мая 2011

В вашем коде вам нужно рисовать только 2 вершины в каждой итерации вместо 4. Последний параметр glDrawArrays - это количество вершин, а не число компонентов (float).

Кроме того, вы можете достичь тех же результатов без цикла и с гораздо меньшими усилиями / кодом / временем: создайте индексный массив, содержащий индексы вершин, которые вы хотите нарисовать, а затем используйте glDrawElements вместо glDrawArrays.

float xy[] = { ... };
int indices[] = { 0, 1, 3, 4 };

glClearColor(...);
glClear(...);
glVertexPointer(...);
glEnableClientState(...);
glDrawElements(GL_LINES, 4, GL_UNSIGNED_INT, indices);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...