Для задания текущего цвета вершины используются команды
>void glColor[3 4][b s i f](GLtype components)
>void glColor[3 4][b s i f]v(GLtype components)
Первые три параметра задают R, G, B компоненты цвета, а последний параметр определяет alpha-компоненту, которая задает уровень прозрачности объекта. Если в названии команды указан тип ‘f’ (float), то значения всех параметров должны принадлежать отрезку [0,1], при этом по умолчанию значение alpha-компоненты устанавливается равным 1.0, что соответствует полной непрозрачности. Если указан тип ‘ub’ (unsigned byte), то значения должны лежать в отрезке [0,255].
Разным вершинам можно назначать различные цвета и тогда будет проводиться линейная интерполяция цветов по поверхности примитива.
Для управления режимом интерполяции цветов используется команда void glShadeModel(GLenummode) вызов которой с параметром GL_SMOOTH включает интерполяцию (установка по умолчанию), а с GL_FLAT отключает.
Например, чтобы нарисовать треугольник с разными цветами в вершинах, достаточно написать:
>GLfloat BlueCol[3]={0,0,1};
>glBegin(GL_TRIANGLE);
>glColor3f(1.0, 0.0, 0.0); //красный
>glVertex3f(0.0, 0.0, 0.0);
>glColor3ub(0,255,0); //зеленый
>glVertex3f(1.0, 0.0, 0.0);
>glColor3fv(BlueCol); //синий
>glVertex3f(1.0, 1.0, 0.0);
>glEnd();
Для задания цвета фона используется команда void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha). Значения должны находиться в отрезке [0,1] и по умолчанию равны нулю. После этого вызов команды void glClear(GLbitfield mask) с параметром GL_COLOR_BUFFER_BIT устанавливает цвет фона во все буфера, доступные для записи цвета (иногда удобно использовать несколько буферов цвета).
Кроме цвета аналогичным образом можно определить нормаль в вершине, используя команды
>void glNormal3[b s i f d](type coords)
>void glNormal3[b s i f d]v(type coords)
Задаваемый вектор может не иметь единичной длины, но он будет нормироваться автоматически в режиме нормализации, который включается вызовом команды glEnable(GL_NORMALIZE). Команды
>void glEnable(GLenum mode)
>void glDisable(GLenum mode)
производят включение и отключение того или иного режима работы конвейера OpenGL. Эти команды применяются достаточно часто, и их влияние будет рассматриваться в конкретных случаях.
Вообще, внутри командных скобок glBegin() и glEnd() можно производить вызов лишь нескольких команд, в которые входят glVertex…(), glColor…()glNormal…(), glRect…(), glMaterial…() и glTexCoord…().
Последние две команды будут рассматриваться ниже, а с помощью команды void glRect[s i f d](GLtype x1, GLtype y1, GLtype x2, GLtype y2), void glRect[s i f d]v(GLtype *v1, GLtype *v2) можно нарисовать прямоугольник в плоскости z=0 с координатами противоположных углов (x1,y1) и (x2,y2), либо набор прямоугольников с координатами углов в массивах v1 и v2.
Кроме задания самих примитивов можно определить метод их отображения на экране, где под примитивами в данном случае понимаются многоугольники.
Однако сначала надо определить понятие лицевых и обратных граней.
Под гранью понимается одна из сторон многоугольника, и по умолчанию лицевой считается та сторона, вершины которой обходятся против часовой стрелки. Направление обхода вершин лицевых сторон можно изменить вызовом команды void glFrontFace(GLenum mode) со значением параметра mode равным GL_CW, а отменить- с GL_CCW.
Чтобы изменить метод отображения многоугольника используется команда void glPolygonMode(GLenum face, Glenum mode)
Параметр mode определяет, как будут отображаться многоугольники, а параметр face устанавливает тип многоугольников, к которым будет применяться эта команда и может принимать следующие значения:
GL_FRONT для лицевых граней
GL_BACK для обратных граней
GL_FRONT_AND_BACK для всех граней
Параметр mode может быть равен:
GL_POINT при таком режиме будут отображаться только вершины многоугольников.
GL_LINE при таком режиме многоугольник будет представляться набором отрезков.
GL_FILL при таком режиме многоугольники будут закрашиваться текущим цветом с учетом освещения и этот режим установлен по умолчанию.