glEnableClientState(GL_C0L0R_ARRAY); glEnableClientState(GL_VERTEX_ARRAY) ;
Сами по себе массивы те же, что и раньше, причем объявляются они в статусе глобальных:
GLfloat vertices[] = {{-1.0,-1.0,-1.0}, {1.0,-1.0,-1.0}, {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0}, {1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};
GLfloat colors[] = {{0.0,0.0,0.0}, {1.0,0.0,0.0}, {1.0,1.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0}, {1.0,0.0,1.0}, {1.0,1.0,1.0}, {0.0,1.0,1.0}};
Следующая операция - передать OpenGL информацию о том, где находятся массивы. Это выполняется следующим образом:
glVertexPointer(3, GL_FL0AT, 0, vertices); glColorPointer(3, GL_FL0AT, 0, colors);
Первые три аргумента несут информацию о том, что элементы массивов являются соответственно трехмерными цветами и вершинами, которые сохраняются в формате float, и что элементы образуют непрерывный массив. Четвертый аргумент - указатель на определенный массив.
Теперь нужно включить в структуру данных информацию об отношениях между вершинами и гранями в кубе. Для этого организуется массив из 24 упорядоченных индексов вершин для шести граней:
GLubyte cubelndices[24]={0,3,2,1,
2,3,7,6, 0,4,7,3, 1,2,6,5, 4,5,6,7, 0,1,5,4};
Первая грань имеет вершины с индексами (0, 3, 2,1), вторая - (2, 3, 7,6) и т.д. Обратите внимание на то, что при упорядочении индексов вершин нужно учитывать порядок их обхода в многоугольнике при взгляде с внешней стороны куба. Массив индексов вершин также должен иметь статус глобального.
Теперь можно приступить к формированию трехмерного объекта - в данном случае куба - на основе информации из этих массивов. При формировании изображения обрабатываются все элементы объявленных массивов (в данном случае - цветов и вершин). Имеется несколько опций настройки, касающихся режима обработки массивов при отображении. Для настройки используется функция
glDrawElements(type, n, format, pointer) Аргументы функции имеют следующий смысл:
4.4. Модель разноцветного куба
type - тип элемента, например линия или многоугольник, который определяется массивом;