ВЫВОД ГЕОМЕТРИЧЕСКИХ ПРИМИТИВОВ
Геометрические объекты в OpenGL задаются вершинами. Вершина -это точка в пространстве графической сцены. Для ее определения в библиотеке OpenGL реализована специальная команда:
void glVertex [2 3 4][s i f d][v](type coord)
Вызов любой команды glVertex* всегда определяется четырьмя однородными координатами: х, у, z и w. Если вызывается команда glVertex3*, то вершина задается х,у и z координатами, при этом w полагается равной 1. Для двумерного случая z - 0, a w - 1.
Вершины в OpenGL объединяются в графические примитивы. Это может быть фигура, такая как точка, линия, многоугольник, прямоугольник пикселей или битовый массив. Каждая вершина примитива имеет ассоциированные с ней данные.
- • Текущий цвет - цвет, который вместе с условиями освещения определяет результирующий цвет вершины. Цвет задается, например командой glColor* для режима RGB А.
- • Текущая позиция растра - используется для определения координат растра при работе с пикселями и битовыми массивами. Задается командой glRasterPoos*.
- • Текущая нормаль - определяет вектор нормали, ассоциированный с отдельной вершиной, и задает ориентацию содержащей ее поверхности в трехмерном пространстве. Для указания нормали используется команда glNormal*.
- • Текущие координаты текстуры - определяют местоположение вершины в карте текстуры. Задается командой glTexCoord*.
Задание цветовых атрибутов геометрическим объектам
В OpenGL предусмотрено два режима установки цвета:
- - задание индекса в палитру цветов;
- - указание непосредственных значений базовых составляющих R (красный), G (зеленный), В (синий) цвета.
В настоящее время графические приложения в основном используют покомпонентное (RGBA) задание цвета. Благодаря этому максимально используются возможности High Color и True Color режимов графических карт. В данных режимах в полной мере моделируется реалистическая графика (работа с освещением, туманом, прозрачностью, устранение ступенчатости и т.д.).
Для установки цвета в режиме RGB А в OpenGL предусмотрены команды:
void glColor[3 4] [b s I f d](GLtype components)
void glColor[3 4][b s I f d]v(GLtype components)
Первые три параметра команды glColor4* задают значения R, G, В составляющих цвета. Четвертый параметр (А) определяет "прозрачность" цвета. Независимо от типа задаваемых параметров, все они хранятся в формате с плавающей точкой и принимают значения из диапазона [0.0, 1.0]. Значение 1.0 соответствует максимальной интенсивности соответствующего компонента. Для параметра альфа (А) 1.0 соответствует непрозрачному состоянию, а 0.0 - полному прозрачному состоянию цвета. При целочисленных значениях аргументов происходит внутреннее преобразование к формату с плавающей точкой в диапазоне [0.0, 1.0] по сле-
|
дующей схеме. |
|
|
GLtype |
Преобразование |
|
GLbyte |
(2c + 1) / (28- 1) |
|
GLshort |
(2c + 1) / (216- 1) |
|
Glint |
(2c+ l)/(232- 1) |
|
GLfloat |
c |
|
GLdouble |
c |
Примечание. с- значение аргументов.
После того как установлен цвет, его значение распространяется на все последующие графические примитивы.
Если требуется плавный переход цветов от одной вершины примитива к другой, то для этого в OpenGL предусмотрена команда glEnable(GL_SMOOTH). В этом случае рассчитывается плавный переход цвета между соседними вершинами по закону линейной интерполяции с = t Ci + (1 -1) С2, где С] и С2~ значения цвета соседних вершин, at - коэффициент интерполяции, изменяющийся в диапазоне [0, 1].