OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 48
Текст из файла (страница 48)
Однако есть специальные режи- В стандартной реализации возможности управления мультивыборкой весьма ограничены. Нельзя изменить число элементов выборки или задать (или даже узнать)их местоположение. Если мультивыборка включена и ее буфер присутствует, то точки, линии и многоугольники «генерируют» фрагменты, для которых выполняется сглаживание, Например, примитив точки большого размера округляется, а не выглядит как квадрат; вне зависимости от того, включен или выключен режим ОЕ Р01МТ 5ИООТН.
Состояния ОЕ Е1НЕ 5ИООТН и ОЕ РОЕУООМ 5ИООТН также игнорируются. Другие атрибуты примитивов, такие как размер точки и толщина линии, множественной выборкой не блокируются. Сглаживание 223 км, где альфа-значения для фрагментов участвуют в расчете покрытия.
Ниже пе(хчислены эти режимы: ° 61 5АИРСЕ АСРНА ТО СОЧЕкАОЕ использует значение альфа-компонента фрагмента для вычисления зоны покрытия; ° 61 5АИРСЕ АСРНА ТО ОНЕ устанавливаетзначениеальфа-компонентафрагмента в гяаксилтальио возможное значение — единицу и использует это значение при вычислении покрытия; к 6С 5АИРСЕ СОЧЕНАОŠ— набор значений, установленных функцией В15аар1еСочегайе(), комбинируется (операцией И) с вычисленным значением покрытия. Кроме того, этот режим может быть «инвертирован» посредством установки признака (претт в функции я15амр1еСочегаке О.
то1г) В15ашр1еСотегабе(О!.с(ашрЕ ра1ие, 01Ъоо!еап (тегс); устанавливает значения параметров, влияющих на интерпретацию значений ильфа-компонента при вычислении покрытия мультивыборки. Аргумент оа1ие— значение покрьпия, используемое, если включен режим 61 5АИРСЕ СОЧЕРАОЕ яли 61 АСРНА ТО СОЧЕНА6Е. Аргумент 1лрегт — значение логического типа, определяющее, должно ли промежуточное значение покрытия оа1ие быть поразрядно инвертировано (логическое И). Сглаживание границ многоугольников Устранение ступенчатости ребер закрашенных многоугольников аналогично спаживанию точек и линий. Если многоугольники имеют общие границы, необюднмо смешать соответствующие значения цветов. Это можно сделать методом, предлагаемгяги в данном разделе; другой вариант — сглаживание всей сцены с покощью буфера накопления.
Работа с буфером накопления (см. главу 10) проще стояки зрения программиста, но требует большего объема вычислений и поэтому ммедляет рисование. С другой стороны, как вы дальше увидите, описываемый к«год более громоздкий. ПРИМЕЧАНИЕ Само собой, сглаживание точек нлн линий выполняется, если многоугольник рисуется в виде точек его вершин нлн ранки, то есть включен режим 6С Р01НТ нлн 6С ЫЧЕ в функции р!Ро!уропМоае0. Цель .-того раздела — показать сглаживание ниенна закрашенного многоугольника (режим 6С Р)СС). Тюретически сглаживание многоугольника можно выполнять и в режиме КОВА, к в режиме индексации цвета.
Однако пересечение многоугольников влияет на сглаживание больше, чем совпадение точек и пересечение линий, поэтому поряюк рисования и точность смешивания становятся более критичными. Фактичеаш они настолько критичны, что при устранении ступенчатости для более чем одного многоугольника необходимо упорядочить многоугольники от ближнего кдзльнему, а затем использовать функцию В1В1епбрцпс() со значениями аргументов 61 5кС АСРНА 5АТЦРАТЕ для источника и 61 ОНЕ для получателя.
Соотмтственно, устранение ступенчатости многоугольников в режиме индексации кзота обычно не используется. 224 Глава б ° Смешивание, сглаживание, туман и отклонение Чтобы выровнять цвет границ многоугольников в режиме ВОВА, а значит, определить степень покрытия для границ многоугольника, нужно использовать значения альфа-компонента, Включение сглаживания многоугольника выполняется командой я1Епао1е(6Е РОЕУ60Н 5НООТН). Тогда пикселам на границах многоугольника будут присваиваться дробные значения альфа-компонента, основанные на зоне покрытия, как если бы эти границы были просто сглаженными линиями. Также, по желанию, можно задать значение для 6Е РОЕУ60Н 5НООТН Н1МТ. Теперь необходимо «смешать» накладываюшиеся границы.
Вначале выключим буфер глубины, так как требуется управлять рисопанием пикселов, совпадающих по положению. Затем установим коэффициенты смешивания в значения 6Е 5ДЕ АЕРНА 5АТОДАТЕ (для источника) и 66 ОНЕ (для получателя). Мы хотим составить конечный цвет из цвета получателя и масштабированного цвета источника. Масштабирование осуществляется путем выбора наименьшего из входных значений альфа-компонента источника и вычтенного из единицы значения альфа-компонента получателя.
Входящие пикселы получателя с большим значением альфа-компонента оказывают малое влияние на результирующий цвет, поскольку значение «1 минус альфа» близко к нулю. В итоге с помощью этого метода пикселы на границах многоугольника должны измениться в соответствии с цветами ппкселов другого многоугольника, рисуемого позже. Наконец, нужно отсортировать многоугольники в сцене в порядке от ближнего к дальнему, перед их рисованием. Туман Компьютерные изображения иногда кажутся нереалистично четкими и ярко выраженными. Устранение ступенчатости делает объекты более реалистичными за счет размытия их границ.
Крогае того, изображение можно приблизить к реальности посредством добавления тумана, который заставляет объекты постепенно «растворяться» при удалении. «Туман» вЂ” это общий термин, описывающий различные формы атмосферных явлений. Он может употребляться при моделировании дымки, мглы, смога или загрязнения воздуха (см. цветной рисунок 9). Туман необходим в приложениях, где требуется создать ограниченную видимость.
Он часто используется в авиасимуляторах. Когда туман включен, объекты, располагаюгциеся вдали от точки обзора, начинают растворяться в цвете тумана. Можно управлять плотностью тумана, которая определяет степень таяния объектов при увеличении расстояния, и его цветом. Кроме того, можно явно определять координаты на основе вершин для вычисления расстояния тумана вместо автоматического вычисления значения глубины.
Туман поддерживается как в режиме КСВА, так и в режиме индексации цвета, с некоторой разницей в вычислениях. Так как туман применяется после матричных преобразований, освещения и текстурирования, он оказывает действие на преобразованные, освещенные и текстурированные объекты. Обратите внимание, что туман способен увеличить производительность больших программ моделирования, поскольку можно не рисовать объекты, скрытые им. Туман 225 ]]се виды геометрических примитивов могут быть затуманены, включая точки и внии. Использование тумана для точек и линий также называется воздушной аерспекгпивой (с]ерС]с-сц[пй) (как показано на цветном рисунке 2).
Этот эффект входит применение в молекулярном моделировании и других приложениях. Применение тумана Моделировать туман чрезвычайно просто. Он включается с помощью команды 1[[раб!е (СС ГОС), а затем с помощью функции к! Рок* () задаются цвет и выраксйне, управляющее плотностью тумана.
При желании можно задействовать значение 61 Г06 Н1МТ в функции К! Н ! и! (), как описывалось в табл. 6 3. Программа ез листинга 6.7 рисует пять красных сфер, находящихся на различных расстояни)и от точки просмотра. Нажатием клавиши Г выбирается одно из трех уравнений, списанных в следующем разделе. Листинг 6.7. Пять затуманенных сфер в режиме КбйА: Год.с ИМ!с СС!пС (панове; сгм(с чо!б (о!С(чо!б) ( Сст!оас роз!с(оп[] = ( 0.5, 0.5, 3.0, 0.0 ); 8!Епаь!е(СС ОЕРТН ТЕЕТ); Е!С(ВПС(ч(СС С16НТВ, 61 Р051Т10М, рос!С(оп); 1!Епаь!е(СС ЫСНТ1й6); а!ЕпаЫе(СС 116НТВ); ( ССС!оаС ма![3] = (9.1745, 9.01175, 0.91175]; 8!Иатег(а!Тч(СС РКОМТ, СС АИВ1ЕМТ, ват); ма![9] = 0.61424; ваС[1] = 0.94136; ма![2) = 0.84136; 8!Наеегта1(ч(СС ГКОМТ, СС 01ГГ05Е, ваС); ваС[9] = 9.727811! ма![ 1] = 9.626959; во![2] = 9.626859; 8!Иатег!а!Тч(СС ГКОМТ, 61 5РЕСОСАК, ваС); 8!Иатег!а!С(СС ГНОИТ, СС 5Н1й1йЕ55, 0.6'128.9); 8!Епаые(СС ГОС); ( СС(!оаС Спасо!ос[4] = (9.5, 0.5, 9.5, 1.0); !панове = СС ЕХР; 8!Гоа((СС РОС ИОВЕ, Соайобе); 8!Гоа(ч(СС Г06 СОСОК, тоКСо!аг),' 8!Гоа((61 РОС ОЕМ51ТТ, 9.35); 81Н!пС(СС Г06 Н1МТ, СС ООМТ САКЕ); 8!Гоат(61 ГОС 5ТАКТ, 1.0); 8!Раас(СС ГОС Ей0, 5.0); ) 8!С!еагсо!ог(8.5, 8.5, 8.5, 1.0); /' мает тумана ° / ! Иа(!с чо!б гепбег5рьеге(ССщоаС х, СС(!оаС у, СС(!оаС а) [ 8]Роа она Сы х (); продолжение Р 226 Глава 6 ° Смешивание, сглаживание, туман и отклонение Листинг 6.7 (продолжение) 81Тгапз!ате1(х, у, а); 81иС5о1<б5РЬеге(8.4, 16, 16); 81Рорнат.г!х(); /* Процедура б<зр!ау() рисует 5 сфер на разной глубине т / чозб б<зр1ау(чо<б) ( 81С1еаг(6С СОСОК ВОЕЕЕМ 81Т ! 6С ОЕРТН ВОЕЕЕМ 81Т); гепбег5рлеге(-2,, -8.5, -1,0)! гепбег5рлеге(-1., -8.5, -2.0); гепбег5рлеге(0., -0.5, -Э.О): гепбег5рлеге(1., -8.5, -4.0); гепбег5рлеге(2., -0.5, -5.0); 81Е1изл (); ) чозб гезларе(<пС н, зпт П) ( 815иенрогС(0, О, (ССз<те!) и, (ССз!те!) Ь) ," В!Матг<хиобе(СС РК02ЕСТ!ОИ); 8!Сааб)беат<ту()', !1 (и <= Ь) 8!ОгСЛо(-2.5, 2.5, -2.5*(СС11оат)П/(6С1!ааС)н, 2,5*(6(11оат)Ь/(СС11оат)н, -10.8, 10.0); е!зе 8!Огтпо(-2.5"(СС1!ба!\и/(СС1!оат)П, 2.5'(6(1!оаС)н/(СС1!аат)Ь, -2.5, 2.5, -18.0, 10.8); 8!Иатг<хиобе (СС ИООЕСЧ)ЕН); В!Сааб)беат<ту<); ) ча$б ХеуЬоэгб(ипз<впеб спаг Кеу, зпт х, <пт у) ( зн<тсп (Хеу) ( сазе сазе 'Е': ! 1 (тоВМобе == СС ЕХР) гоВИобе = СС ЕХР2; рг!пт1("Режим тумана СС ЕХР2!и"); ) е1зе <1 (1оВМобе == СС ЕХР2) ( 1оВМобе = СС С1МЕАВ; рг<птг("Режим тумана СС С1МЕАМтп"); ) е!зе з1 (говнобе == СС С(МЕАМ) ( 1оВИабе = СС ЕХР; рг<пС1("Режим тумана 6С ЕХР!п"); ) 81Еой<(6С Е06 МООЕ, 1аВМобе); 8\иСРазтйеб<зр1ау(); Ьгеак; сазе 27: ехтс(0); Туман 227 Ьгеакц Ое(ао11: Ьгеаа; 1ас аа(п(1п( агас, сьаг*' агхч) ( Н1пс(п11(аагцс, агач); Н!о((п110!но1ауМоее(6ЬВТ 5!М6(Е ! 6(цт Й6В ! 6(цт 0ЕРТН); Н)пс(п(си(пеон5(ае(5ВВ, 5ОО); В1осг генсек! пеон(агач (В! ); зп11(); Н1онаеньаоехопс(ге»паре); Н1п(кеуьоагееопс(аеуьоаге); Н1п(0!нр1аувопс(О)нр1ау); Н1ч(Ма!п(ооо(); гегьгп 0; Уравнения тумана Смешивание цвета тумана с цветом входящего фрагмента выполняется согласно нозффиниенту смешивания.