Рис. 4.32. Шаблон размером 3 на 3 бит (панель а), наложенный на параллелограмм с целью получения закрашенной области (панель б), где правый верхний угол шаблона совпадает с нижним левым углом параллелограмма ТЕК-ТУРНЫЕ И ИНТЕРПОЛЯЦИОННЫЕ ШАБЛОНЫ В OpenGL
Еще один способ закрашивания многоугольников - использовать текстурные шаблоны, которые рассматриваются в главе 10. Это может дать узоры, напоминающие поверхности дерева, кирпича, нержавеющей стали или какого-то другого материала. Кроме того, можно получить интерполяционную раскраску внутренней области многоугольника, точно так же, как это делается для примитивов прямых линий. Чтобы сделать это, различным вершинам многоугольника присваиваются различные цветовые значения. Интерполяционное закрашивание внутренних областей многоугольников используется для создания реалистичных изображений затененных поверхностей при различных условиях освещения.
В качестве примера интерполяционного закрашивания приведем следующий фрагмент кода, в котором трем вершинам треугольника присваивается синий, красный или зеленый цвет. После этого многоугольник закрашивается с помощью линейной интерполяции цветов этих вершин.
д1311ас1еМос1е1 (-Ь_ЭМООТН); д1Ведл.п (вЪ_ТК1АШЪЕЗ) ; д1-о1огЗ£ (0.0, 0.0, 1.0); д1\/е1^ех21 (50, 50); д1-о1о^ (1.0, 0.0, 0.0); д1\7е:1^ех21 (150, 50); д1-о1огЗ£ (0.0, 1.0, 0.0); д1Уех±ех21 (75, 150); д1Еп<1 ( ) ; Конечно, если треугольнику как целому присвоить одно цветовое значение, то он весь будет закрашен одним цветом. А если в этом примере изменить аргумент функции д13Ьас1еМос1е1 на 6Ь__ЕЪАТ, то многоугольник будет закрашиваться последним заданным цветом (зеленым). Значение -Ь_БМООТН используется по умолчанию, но эту спецификацию можно включить явно, чтобы напомнить, что многоугольник должен быть закрашен с интерполяцией цветов вершин.
КОНТУРНЫЕ МЕТОДЫ В OpenGL
Иногда требуется показать только стороны многоугольников. При этом получаются контурные изображения многоугольников. Также можно изобразить многоугольник, указав только точки в его вершинах. Для реализации этих опций используется следующая функция
glPolygonMode (face, displayMode); Параметр face обозначает, какую поверхность многоугольника нужно показать с помощью только сторон или вершин. Этому параметру присваивается значение GL_FRONT, GL_BACK или GL_FRONT_AND_BACK. После этого, если требуется изобразить одни только стороны многоугольника, параметру displayMode присваивается значение GL_LINE. Чтобы получить изображение одних только вершин многоугольника, параметру displayMode присваивается значение GL_POINT. Третья альтернатива - GL_FILL, которая является режимом по умолчанию, поэтому, как правило, функция glPolygonMode вызывается только тогда, когда нужно задать атрибуты для сторон или вершин многоугольника.
Еще один вариант - изобразить многоугольник с помощью закрашенной области и его сторон (или вершин), показанных другим цветом или узором. Это можно сделать, описав многоугольник дважды: один раз с параметром GL_FILL в функции displayMode, а второй раз - с параметром GL_LINE (или GL_POINT) в этой же функции displayMode. Например, следующий фрагмент программы заполняет внутреннюю область многоугольника зеленым цветом, а затем его стороны изображаются красным цветом.