1. Вызвать функцию glEnableClientState (GL_VERTEX_ARRAY), чтобы активизировать возможность создания массива вершин в OpenGL.

2. Воспользоваться функцией glVertexPointer для задания местоположения и формата данных для координат вершин.

3. Изобразить сцену с помощью стандартной процедуры, такой как glDrawEle-ments, которая может обрабатывать несколько примитивов с помощью небольшого числа вызовов функций.

В качестве примера используем массив pt, заданный ранее для куба, и выполним эти три пункта в следующем фрагменте программы.

glEnableClientState (GL_VERTEX_ARRAY); glVertexPointer (3, GL_INT, 0, pt);

GLubyte vertlndex [ ] = (6, 2, 3, 7, 5, 1, 0, 4, 7, 3, 1, 5,

4, 0, 2, 6, 2, 0, 1, 3, 7, 5, 4, 6); glDrawElements (GL_QUADS, 24, GL_UNSIGNED_BYTE, vertlndex); С помощью первой команды glEnableClientState (GL__VERTEX_ARRAY) активизируется возможность (в данном случае создания массива вершин) со стороны клиента системы клиент-сервер. Поскольку данные о рисунке хранятся у клиента (на машине, запускающей главную программу), то массив вершин также должен нахо диться там. Как отмечалось в главе 2, сервер (например, рабочая станция) отдает команды и выводит рисунок на экран. Разумеется, одна и та же машина может быть и клиентом, и сервером. Возможность пакета OpenGL создавать массив вершин отключается с помощью следующей команды.

glDisableClientState (GL_VERTEX_ARRAY) ; После этого с помощью функции glVertexPointer задается местоположение и формат координат вершин объекта. Первый параметр функции glVertexPointer (в данном примере это 3) обозначает число координат, которое задается для каждой вершины. Тип данных для координат вершин описывается с помощью символьной константы OpenGL, которая служит вторым параметром этой функции. В нашем примере тип данных - GL_INT. Другие типы данных описываются с помощью символьных констант GL_BYTE, GL_SHORT, GL_FLOAT и GL_DOUBLE. С помощью третьего параметра задается смещение (в байтах) между соседними вершинами. Данный аргумент позволяет использовать в одном массиве различные типы информации, такие как координаты и цвета. Поскольку в нашем примере задается только информация о координатах, этому параметру смещения присваивается значение 0. Последний параметр в функции glVertexPointer указывает массив вершин, в котором содержатся значения координат.

Все индексы вершин куба записываются в массив vertlndex. Все они являются индексами массива pt, соответствующими значениям координат вершин. Данный список индексов применяется в качестве последнего параметра функции gl-DrawElements, а затем он же используется примитивом GL_QUADS в качестве первого параметра при изображении набора четырехугольных поверхностей куба. Второй параметр обозначает количество элементов в массиве vertlndex. Поскольку для четырехугольника нужно знать только четыре вершины, а мы задаем 24, функция glDrawElements изображает еще одну сторону куба, образованную следующими четырьмя вершинами, и так до тех пор, пока не будут обработаны все 24 вершины. Таким образом, в результате вызова одной этой функции будет получено изображение всех граней куба. Третий параметр функции glDrawElements сообщает тип значений индексов. Поскольку в нашем примере индексы представляют собой небольшие целые числа, тип данных описывается как GL_UNSIGNED_BYTE. При обозначении индексов могут использоваться еще два типа данных - GL_UNSIGNED_SHORT и GL_UNSIGNED_INT.


⇐ вернуться назад | | далее ⇒