Шаг 26 - Списки вершин

Список вершин - это достаточно удобная штука, если вам надо изобразить сложную фигуру с большим количеством вершин. В этом случае вы можете загрузить все вершины в массив (а так же загрузить и массив цветов) и с помошью специальной команды glDrawArrays(...) отобразить всю фигуру. Кроме того на многих акселях эта команда реализована аппаратно. Такой подход много эффективнее чем рисование всех вершин при помощи glVertex..(...).

Давайте рассмотрим пример рисования списка вершин.

Как обычно создадим уже надоевший всем проект. Объявим 2 переменные, массив вершин и массив цветов:

GLfloat Vertex[4][2];
GLfloat Colors[4][3];

В конструкторе C...View заполним эти массивы:

Vertex[0][0] = -0.9f;
Vertex[0][1] = -0.9f;
Colors[0][0] = 0.1f;
Colors[0][1] = 0.5f;
Colors[0][2] = 0.85f;

Vertex[1][0] = -0.9f;
Vertex[1][1] = 0.9f;
Colors[1][0] = 0.85f;
Colors[1][1] = 0.1f;
Colors[1][2] = 0.5f;

Vertex[2][0] = 0.9f;
Vertex[2][1] = 0.9f;
Colors[2][0] = 0.85f;
Colors[2][1] = 0.85f;
Colors[2][2] = 0.85f;

Vertex[3][0] = 0.9f;
Vertex[3][1] = -0.9f;
Colors[3][0] = 0.5f;
Colors[3][1] = 0.85f;
Colors[3][2] = 0.1f;

Теперь осталось указать OpenGL, что мы хотим использовать эти массивы и как мы их хотим использовать. Для этого воспользуемся 2 командами:

glVertexPointer(2, GL_FLOAT, 0, Vertex);
glColorPointer(3, GL_FLOAT, 0, Colors);

Для того, чтобы функция glDrawArray сработала корректно нам необходимо включить этот режим. К сожалению включение данного режима выполняется не стандартной командой glEnable, а специальной glEnableClientState(...) с соответствующим аргументом. В данном случае мы включаем режим массива вершин для цветов и вершин:

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);

Уфф... Теперь все. Можем спокойно вызвать glDrawArray(...) и посмотреть, что получилось.

glDrawArrays(GL_POLYGON, 0, 4);

Теперь осталось только выключить режимы, которые включили выше. Делается это аналогичными командами:

glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);

Шпаргалка

Для работы с массивами вершин необходимо:

  1. Объявить и инициализировать массивы вершин и цветов
  2. Загрузить эти массивы в OpenGL ;)
  3. Включить режимы рисования массива вершин
  4. рисовать
  5. выключить режим рисования массива вершин

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Kirill V. Ratkin - 27.05.2000