OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 15
Текст из файла (страница 15)
Если соседние многоугольники имеют общие границы или вершины, пикселы на границах или вершинах рисуются всего один раз — они принадлежат только одному многоугольнику — с той целью, чтобы у частично прозрачных многоугольников границы не рисовались дважды, что слелало бы их более темными (или светлыми, в зависимости от цвета рисования). Результатом зтого может быть отсутствие заливки в одном илн нескольких пиксельных столбцах или строках в узких многоугольниках. Для сглаживания закрашенных многоугольников рекомендуется использовать режим мультивыборки, Для получения более детальной информации см.
раздел «Сглаживание геометрических примитивов с помощью мультивыборкн» главы б. Многоугольники в виде точек, границ или заливки Многоугольники имеют две стороны — лицевую н оборотную, которые могут быть отрисованы различно, в зависимости от того, какая сторона сейчас видна. Это позволяет получать такой разрез сплошных объектов, где ясно различаются внутренние и внешние части. По умолчанию обе поверхности рисуются одинаково. Для изменения режима по умолчанию или рисования только контура или вершин используется функция к1Ро1укопног) е () .
чоЫ к! Ро1уяопнаае(С! еппш (асе, СЕепшп тоНе); Управляет режимом рисования лицевой и оборотной сторон многоугольников. Параметр(псе может приниматьзначение 6С РРОМТ АМО ВАСК, 6Е ЕПОМТ или бь ВАСК,а параметр тог(е — значенпе6Е РО1МТ,6Е Е(МЕ или 61 Р1СЕ,определяющие, рисуются ли точки, контур или залитый многоугольник. По умолчанию обе стороны многоугольника рисуются залитыми.
Например, можно нарисовать многоугольник с залитой лицевой стороной и оборотной в виде контура с помощью следующих двух команд: В1Ро1увопиоее(6( ЕВОМТ, сс Е1Ы(); В1Ро1увопноде(6( ВАСК, 6( С1МЕ); Обращение и отбраковка поверхностей многоугольников Условно многоугольники, вершины которых заданы против часовой стрелки, называются лицевыми ((гоп(4ас(пй). Можно создавать поверхности с любой «разумной» заливкой — математики могут назвать такую поверхность ориентируемым многообразием (возможны сферы, кольца и чайники; невозможны бутылки Клейна и ленты Мебиуса) — из многоугольников с непротиворечивой ориентацией. Другими словами, можно использовать все многоугольники с направлением обхода по часовой стрелке или все многоугольники, заданные против часовой стрелки.
(Это, по существу, математическое определение ориентируемасти.) Отображение точек, линий и многоугольников 67 Допустим, вы должным образом описали модель ориентированной поверхности, но вам нужна ориентация по часовой стрелке для невидимой стороны. Вы можете поменять оборотную сторону («вывернуть наизнанку») с помощью функции В! РгопСРасе(), задающей желательную ориентацию лицевого многоугольника. уоЫ В1РгоптРасе(0(.еппщ тогге); Управляет тем, как определяется лицевой многоугольник. По умолчанию аргумент мог(е равен 6С ССИ, что означает ориентацию против часовой стрелки для вершин формируемого многоугольника в оконных координатах. Если горгоне равен 6( СИ, рассматривается многоугольник с ориентацией поверхностей по часовой стрелке.
ПРИМЕЧАНИЕ Ориентация (по часовой или против часовой стрелки) вершин также называется намоткой— ьипйпд. Несколько слов для полного закрытия вопроса построения поверхностей из непрозрачных многоугольников с последовательной ориентацией: ни один заднеобращенный многоугольник (ласк-у астщ) не виден — они всегда скрываются лицевыми многоугольниками. Если точка наблюдения расположена снаружи поверхности, вы можете включить отбраковку (сий(пд) для отброса многоугольников, которые ОрепОЪ определяет как оборотные. И наоборот, если вы смотрите изнутри объекта, вам видны только заднеобращенные многоугольники. Чтобы Орепб( отбрасывал лицевые или невидимые многоугольники, используйте команду В1Сц11РасеО и включите отбраковку с помощью функции В1ЕпаЬ(е().
уоЫ В1Сц11Расе(С(.епцш горгоне); Определяет, какие многоугольники должны быть отброшены (отбракованы) перед переводом в оконные координаты. Переменная тогуе принимает значение 6С РВОМТ, 6С ВАСК или 6С РВОМТ АМВ ВАСК для указания лицевых, оборотных или всех многоугольников. Чтобы добиться результата, необходимо включить отбраковку с помощью функции В1ЕпаЬ1еО со значением 6С СВЕС РАСЕ. Для отключения отбраковки используется функция 610! заЬ1е() с тем же значением аргумента. ПРИМЕЧАНИЕ В более технологичных терминах определение типа многоугольника зависит от области многоугольника, вычисленной в оконных координатах. Один из способов вычисления выполняется по формуле 1" а= — ~Х,У,е, -Х,в,У,, 2,=» где х, и у, — оконные координаты х и у Рй вершины и-вершинного многоугольника, а г Э 1 = (1 е 1) Ъ|пос1 и Допустим, определен режим 6С ССуу; если а > О, вершины многоугольника образуют лицевой многоугольник, в противном случае — оборотный.
Если определен режим 6С Суу н а «О, то многоугольник лицевой, иначе — оборотный. 68 Глава 2 ° Управление состоянием н рисование геометрических объектов Упражнение Измените листинг 2.5, добавив в него несколько закрашенных многоугольнико Поэкспериментируйте с различными цветами и режимами. Также включите о браковку для оценки вносимого ею эффекта. Фактурные многоугольники По умолчанию закраска многоугольников — сплошная. Но, аналогично прерыви етым линиям, она также может быть фактурной (зг!рр!(пй), определяемой маско 32 х 32 бита, задаваемой посредством функции к1Ро1укол5Ст рр1е() . уо!г! к1ро(укол511рр1е(сопз( ОЕцьу(е 'таза); Определяет образец фактурирования для многоугольников. Аргумент тззй — ука ватель на битовую карту размером 32 х 32, которая интерпретируется как мас из О и 1. Если появляется 1 — пиксел подсвечивается, а если Π— нет.
Рисунок 2.1 показывает, как из символов аргумента таза получается трафарет. Режим фактур ной закраски включается и выключается командами 81 Ел а Ь(е О и к101 з а Ь)е О с значением ОС РОЬУООМ 5Т1РРЬЕ Интерпретация данных таза происходит в зази симости от режима хранения, задаваемого параметром Оь ОМРАСК* для команд к1Р(хе15(о ге' () . (См, раздел «Режимы хранения пггкселов» главы 8 ) 28643216 8 4 2 1 По умолчанию в каждом байте наиболее значимым является младшнй бнт.
Порядок битов может быть намечен вызовом функции д)Р)кеБ1оге*О Рис, 2.10. Создание фактурного образца Отображение точек, линий и многоугольников 69 Кроме задания собственно образца, необходимо включить фактурирование: бтбпаьте(бь Еоьубон 5тггггб); Для отключения режима фактурировання используется функция к\От тбаЬ[е() с тем же значением аргумента. Рисунок 2.11 показывает результат рисования многоугольника со сплошной за- краской и двумя разными фактурными закрасками.
Текст программы приведен в листинге 2.6. Инверсия белого в черное (из рнс. 2.10 в рис. 2.11) возникает из-за того, что программа для случая рис. 2.10 выполняет рисование белым на черном фоне. Рис. 2.11. Фактурные многоугольники Листинг 2.6. Фактурные образцы для многоугольников: ро!уб.С тете отар)ау(хптп) ( б(иЬуте Ьат(Соле[] = [ ОхАА, ОхАА, охАА, ОхАА, ОхАА, ОхАА, охАА, ОхАА, охАА, 9хАА, ОхАА, ОхАА, ОхАА, ОхАА, ОхАА, ОхАА, ЕхАА, ОхАА.
ОхАА, ОхАА, ехАА, ОхАА, охАА, ОхАА, ОхКК, ОхКК, ОхКК, ОхКК, Ох55, Ех55, Ох55, Ох55, ох55, Ох55, Ех55. Ох55, 9х55, Ох55, Ех55, Ох55, Ох55, Ех55, Ех55, ох55, Ох55. Ох55, Ех55, ох55, Ох55. 8х55, ох55. Ох55, Ох55, ех55, Ех55, Ох55, продолжение р бгиЬуСе Охоо Охоз Ох04 Ох04 Ох04 Ох44 ох44 Ох44 Охбб Ох16 Ох07 Охез Охоб Ох 18 Ох 16 Ох10 (1уП = ( охоо, охео, охое, ЕхВО, Охот, ЕхСО, Охбо, Охоб, Ох20, Ох18, Ох18, Ох20, Охоб, Охбо, Ох20, Ох01, Охво. Ох22, Ох01, Ох88, Ох22, ох01, Ох80, Ох22, ех01, Охве, Охбб, Ох81, Ох81, Ех68, Охе1, Ох87, Охео, Ех31, Ох8с, Охсо„ охб4, Ох26, Охбо, Охсс, ехзз, ох18, Охбз, ехСб.
Ох08, Ох18, Ох18, Ех08, Охоо, Охее, Охбб, 9хС6, Ох04, Охзо, Ох04, ОхОС, Ох44, Охоз, ох44, Ех01, Ох44, Ох91, Ох44, Ох01, Охзз. ех01, охОС, ОхС1. ОХВЗ' ,ОХЗт, ехоз, Охзз. Охос, Ехсс. Ох19, Ехс4, Ох10, Ехзо, Ох10, Охоо, Охоо, охоо, Охоз, Охбо, ЕхОС, Ох20, Охзо, Ох20, ОхСО, Ох22, ОхвО, Ехгг, Ох89, Ох22, Охво, ох22, ох88. ехСС, ох83, Охзо. Ох(с, Охсо Ехсс, Оксо, ОХЗЗ, охзо. Ох23, Ох08, Охос, охов, ЕХОО, ОХОВ); 70 Глава 2 ° Управление состоянием и рисование геометрических объектов Листинг 2.6 '(лродолженое) ОхАА, ОхАА, вхАА, вхАА, ех55, Ох55, Ох55, ОхАА, ОхАА, ОхАА, ОхАА, ех55, Ох55, Ох55, ОхАА, ОхАА, ОхАА, ОхАА.