В пакете OpenGL заполненная область должна задаваться в виде выпуклого многоугольника. Таким образом, список вершин для закрашенного многоугольника должен содержать по меньшей мере три вершины, там не должно быть пересекающихся сторон, а все внутренние углы многоугольника должны быть меньше 180°. Закрашенная область в виде одного многоугольника может задаваться с помощью одного только списка вершин, и в этом случае невозможны конфигурации, содержащие отверстия во внутренней области многоугольника, например, подобные представленной на рис. 3.54 (такую фигуру можно описать с помощью двух наложенных друг на друга выпуклых многоугольников).

У каждого заданного многоугольника есть две стороны: передняя и задняя. В пакете OpenGL цвет заполнения и другие параметры можно задавать для каждой стороны отдельно, а определение передней (задней) стороны необходимо как в двух-, так и в трехмерных стандартных процедурах визуализации. Следовательно, вершины многоугольника должны задаваться в направлении против часовой стрелки, если смотреть на многоугольник “снаружи”, и таким образом определяется передняя сторона этого многоугольника.

Изображение закрашенного квадрата, полученное с помощью функции дШесЪ

Рис. 3.55. Изображение закрашенного квадрата, полученное с помощью функции дШесЪ

Поскольку графические изображения очень часто содержат закрашенные прямоугольные области, пакет OpenGL предлагает специальную функцию изображения прямоугольника, которая непосредственно обрабатывает спецификации вершин в плоскости ху. В некоторых версиях OpenGL приведенная ниже процедура может оказаться более эффективной, чем построение закрашенного прямоугольника с помощью функции glVertex.

glRect* (xl, yl, x2, y2); Один угол этого прямоугольника находится в точке с координатами (xl, yl), а противоположный угол прямоугольника - в точке с координатами (х2, у2). Индексы функции glRect обозначают тип данных и то, выражаются ли координаты в виде элементов массива. Эти индексы - i (для целых чисел), s (для коротких целых чисел), f (для чисел с плавающей запятой), d (для чисел двойного точности) и v (для векторов). Прямоугольник изображается таким образом, что его стороны параллельны координатным осям плоскости ху. В качестве примера приведем следующую команду, с помощью которой определяется квадрат, изображенный на рис. 3.55.

glRecti (200, 100, 50, 250); Если задавать значения координат этого прямоугольника в виде массива данных, то такой же самый квадрат можно получить с помощью следующего кода.

int vertexl [ ] = 200, 100;

int vertex2 [ ] = 50, 250;

glRectiv (vertexl, vertex2); Остальные шесть примитивов закрашенных многоугольников в пакете OpenGL задаются с помощью символьной константы в функции glBegin вместе со списком команд glVertex. С помощью константы OpenGL GL_POLYGON можно получить изображение одного закрашенного многоугольника, подобного показанному на рис. 3.56, а. Для этого примера предположим, что дан список из шести точек, обозначенных от р1 до рб, которые представляют собой координаты вершин двухмерного многоугольника, заданных в направлении против часовой стрелки. Каждая из этих точек представлена массивом координат (х, у).


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