glColorPointer (nColorComponents, dataType, offset, colorArray); Параметру nColorComponents присваивается значение 3 или 4, в зависимости от того, заносятся ли в массив colorArray цветовые компоненты RGB или RGBA. Символьная константа OpenGL GL_INT или GL_FLOAT присваивается параметру dataType и указывает на тип данных цветовых значений. Для отдельного цветового массива параметру offset можно присвоить значение 0. Однако, если в одном массиве комбинируется информация о цвете с информацией о вершинах, значением параметра offset должно быть количество битов между каждым набором цветовых компонентов в массиве.

Чтобы проиллюстрировать использование цветовых массивов, несколько изменим пример массива вершин из раздела 3.17, чтобы включить в него цветовой массив. С помощью следующего кода устанавливается синий цвет всех вершин на лицевой грани куба, а все вершины на обратной стороне окрашиваются в красный цвет.

typedef GLint vertex3 [3], color3 [3]; vertex3 pt [8] = 0, О, 0, 0, 1, 0, 1, 0, 0,

1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1 ;

color3 hue [8] = 1, 0, 0, 1, 0, 0, 0, 0, 1,

0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1 ;

glEnableClientState (GL_VERTEX_ARRAY); glEnableClientState (GL_COLOR_ARRAY); glVertexPointer (3, GL_INT, 0, pt); glColorPointer (3, GL_INT, 0, hue); Можно даже поместить цветовые значения и координаты вершин в один объединенный массив. В таком случае каждый указатель будет связан с одним объединенным массивом с соответствующим значением параметра offset. Например,

static GLint hueAndPt [ ] =

1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,

0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0,

1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1,

0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1;

glVertexPointer (3, GL_INT, 6*sizeof(GLint), hueAndPt [3]); glColorPointer (3, GL_INT, 6*sizeof(GLint), hueAndPt [0]);


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