М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 91
Текст из файла (страница 91)
Подбери~с аргувеаты так, чтобы позиция точки наблюдения слегка отклонялась от ее истинной аознцин и чтобы каждый конус угла зрения проецировался в общий прямоугольник, принадлежащий фокальной плоскости, как показано на рис. 10ай Результаты по всем вариантам воспроизведения сцены нужно усреднить обычным обраюи через буфер накопления.
Рмс. 10лъ <Дражанмеь видимого объема с целью получения эффекта глубины резкости На цветном рисунке 10 показано изображение пяти чайников, сформированное ~имитацией глубины резкости. Чайник золотого цвета (второй слева) находится 412 Глава 10 ° Буфер кадров в фокусе, а другие теряют четкость при удалении от фокальной плоскости (золотой чайник). Код, посредством которого было получено изображение, приведен в листинге 105 (считаем, что ассрегзрес!(ЧеО определены ассргьзтивО, как в листинге 10.2). Сцена рисуется восемь раз, каждый раз с небольшим отклонением, вызовом ассрегзрест(чеО. Как вь! помните из примера со сглаживаниеи сцены, пятый и шестой параметры «дрожания» смещают сцену относительно осей координат х и у.
Однако, чтобы получить аффект глубины резкости, положение фокальной плоскости г должно быть неизменным. Оно задается девятым (последним) аргументом ассрегзрест(че(), и в нашем случае равно 5.0. Уровень размытия определяется константой — произведением смещений «дрожания» х и у (седь»!Ой и восьмой параметры ассре гзрес1! Че () ). Ее значение не выводится теоретически, а подбирается зкспериментально на основании значений глубин резкости изображаемого пространства. (Заметьте, что в листинге 10.5 пятый и шестой аргументы ассрегзрес!(че() равны О, что означает отсутствие сглаживания сцены.) Листинг 10.5. Имитация глубины резкости; (]ойс чо!О (п! 1(чо(О) ( 6СГ!Ьат авЬтепт[] = ( 9.0, 9.0, 0.0, 1.0 ); 6[т!Ьат О1(тозе[] = ( 1.0, 1.0, 1.0, 1.0 6СГ!Ьа! ереси!аг[] = ( 1.0, 1.0.
1,0, 1.8 6[с!оа! роя1!!оп[] = ( 0.0, 3.0, 3.0, 0.0 ); 6СГ!Ьа! 1вобе1 авь1епс[] = ( 9.2, 9.2, 8,2, 1,0 6СГ!Ьаг 1оса! ч]еи[] = ( 0.0 ); 81(!Впсти(6( С16НТВ, 6С АМВ1ЕМТ, авЬтеп!); 8!Ы ВП!Гч(6( С16НТВ, 6С 01ЕЕ05Е, от(тозе); а!С!ВЬ!(ч(6С С!6НТВ. 6( Р05]Т]ой, роятс!оп); 8!Ствитиопе!Гч(ОС С]ОНТ МООЕС АМВ]ЕМТ, !вове! авь(епг); 8!Стяигмобе!Гч(ОС С16НТ МООЕС СОСАС Ч1ЕИЕВ, 1оса1 чтен); 8!Егоп!Расе(ОС СИ); 8!ЕпаЫе(6( С16НТ1Н6), 8!ЕпаЫе(6( ЫОНТО); 8!ЕпаЫе(6( АЬТО МОММАС); 8!ЕпаЫе(6С МОММАЫЕЕ); 8!ЕпаЫе(6С ОЕРТН ТЕ5Т); 8!С!еагсо!Ьг(9.9, 0,0, 0.0, 0.0); 8!С!еагпссов(8.9, 0.0.
0.9, 0.0); /* список отображения дпя чайника */ !еарот[1яС = 8!Оеп((я!»(1); 8!Менс1аг(Сеаро![ттат, 6( СОМР1(Е); 8!Ь15о!тбтеаро!(8.5); 81Епбш ят(); ) чо!О гепбегТеароС(6СГ!оаС х, 6(Г!Ьа! у, 6СГ!Ьаг т, Буфер накопления 413 61Розпнатг1х(): 61Тгапз1а(е1(х.
у, а); еаС[0] = ааЬг; ма![1] = ааЬВ; аз![2] = авЬЬ; ма![3] = 1.0; б!МаСег1а!гч(6С ЕЙОЙТ, 6С АМВ1ЕНТ, ваС); ааС[0] = 811г; ваС[1] = О!16; ма![2] = 811Ь; б!Маеегза!Гч(ОС РНОНт, 6С 0[РРО5Е, ваС); ааС[9) = зрес г; ма! [ 1] = зресб; ааС [2] = зресЬ; б!Маеег(а!(ч(6С РНОНт, 6С 5РЕСОСАН, ааС); 61Матегза1!(6С РНОНТ, ОС 5Н1М1НЕ55, зо!пе*128.8); б!Са!!Сзз((ееароСС1зС); б!Рарна(гзх(); ] го!Е О!зр1ау(чо10) ( [пт )1ССег; 61(пС ч(еирогС[4]; 516е(1п(ебегч(бс Ч1ЕИРОНТ, ч(еирогС); б!С!еаг(ОС АССОМ ВОРРЕН 8]т); 1ог ()зССег = 9; )зССег < 8; ) 1ССег++) ( 61С1еаг(ОС СО!ОН ВОРГЕН В!Т [ ОС ОЕРТН ВОРРЕН 81Т); ассРегзресС !че (45 . О, (6СОооо!е) ч1 еирогС [2] 7 (ОСОЬОЬ!е) 1.0, 15.9, 0.0, 0.9, 9.33')8[]1ССег].х, 9.33")8[) 1ССег].у, 5.9); (' Рубиновый, золотой.
серебряный, изумрудный и циановый чай гепдегТеароС(-1.1, -0.5. -4.5. 0.1745, 0.91175, 9.01175, 0.61424, 0.04136, 0.04136. 9.727811, 0.626959, 0,626959, О.б); гепдегТеароС(-0.5, -0.5, -5.0, 9.24725, О. 1995, 0,0745, 0.75164, 0.60648, 0.22648, 9.628281, 0.555882, 9.366065, 0.4),' гепдегТеароС(8.2, -9,5. -5.5, О. 19225, 9. 19225, 0.19225, 0.59754, 0.50754. 0.50754, 0.508273, 9.508273. 0.508273, 0.4): гепдегтеароС(1.8, -9.5, -6.0, 8,8215.
8,1745, 0.8215, 0.07568, 9,61424, 0.07568, 0.633, 0.727811, 0.633, 9.6); гепдегТеароС(1.8, -0.5, -6.5, 9.0, 9.1, 0.86, 0.0, 0.50980392, 0.50980392, 0.59196078, 0.50196078, 0.59196078,.25)'! 61Ассоа(ОС АССОМ, О. 125); б!Ассов(ОС НЕТОНН, 1.9): б!Р!Озн(); ч1еирогС[3], ники '7 продолжение Р 6[11оаС авЬг, ОС(1оаС авЬВ, 6СС!оаС ааЬЬ, 6[1!оаС д!(г, 6С(!оаС О!16, ОС(!оаС Оз(Ь, 6[!!оаС зресг, 6СГ!оаС зресб, 6С11оаС зресЬ, 6(11оаС 481пе) ( 6!!!оаС ма![4]: 414 Глава 10 ° Буфер кадров Листинг 10.5 (продолжение) чо»б ге»паре(тпс и, !пс и) ( 81Ч!еирогС(8, О, (614!се!) и, (615\се!) П); ) Главный цикл * Убелитесь е наличии запроса бу!бера накопления.
»! !пс яатп(тпс агбс, спаг** агбч) ( 81ЧС1птт(аагбс, агбч); 81цС1п!СО!»р1аунобе(6(ОТ 51Н6СЕ ( 6СОТ а68 ! 6СОТ АССОМ ! 6СВТ ОЕРТН); 81цС1п!СИ(пбои5!се(488, 408); 81цС1п!СИ(пбоиРоь(С(оп(188, 180); 81цССгеатеИ(пбои(агбч(0)); (п»с(); 81цтаеььарерцпс(геььаре); 81цСО»»Р1аУРцпс(б!»Р1ау); 81цСМатпьоор(); геСцгп 8: Плавные тени Чтобы получить суммарную тень от множества источников цвета, нужно воспроизвести теши от каждого источника по отдельности и свести их вместе. Это вычисление может быть объединено во времени с пространственным «дрожанием» (сглаживаннем сиены).
(См. раздел «Тени» для получения подробной информации об отрисовке теней.) «Дрожание» Если вам нужно 9 или 16 экземпляров изображения для устранения его ступенчатости, вы можете подумать, что лучшим выбором точек будет равномерная сетка с шагом в пиксел. Удивительно, что такой подход неверен. В действительности лучшей мыслью будет брать точки, принадлежащие смежным пикселам. В предположении, что вы можете захотеть получить равномерное или нормализованное распределение, со средним значением поближе к центру пикселов, мы подготовяли табл.
10.5, в которой представлено несколько наборов подходящих значений для «дрожания» в соответствии с количеством экземпляров изображения. Большинство наборов н этой таблице равномерно распределены в пикселе, и все лежат в пределах пиксела. Таблица 10.8. Значения для «дрожания» Количество Значения (0.25, 0.75), (0.75, 0.25) (0.5033922635, 0.8317967229),(0.7806016275, 0.250438087?),(0.2261828938, 0.4131553612) (0.375, 0.25), (0.125, 0.75), (0.875, 0.25),(0.625, 0.75) Мозаичное представление и поверхности второго порядка Прочитав эту главу, вы научитесь: ° Отображать вогнутые закрашенные многоугольники, предварительно разбитые на выпуклые многоугольники, которые могут быть отображены стандартными средствами Орели~ ° Использовать библиотеку инструментов Ореола~ для создания объектов второго порядка — моделировать и отображать поверхности сфер и цилиндров, дисков и неполных дисков Мозаичное представление многоугольников 417 Библиотека ОрепС(.
1!Ъгагу (СЪ) разработана для низкоуровневых операций, оптимально совместимых с аппаратными видеоускорителями. Библиотека инстРументов ОрепС1. (ОрепС1. ()г!!!гу 1»Ьгагу, СЕН) служит дополнением к библиотеке ОрепС1 и поддерживает операции более высокого уровня. Некоторые операции СШ рассмотрены в других главах. М1Р-преобразование (П1нйнт1П« 0РП рва рз () ) и масштабирование изображений (п1ц 5 са1е1юапе () ) обсуждались вместе с другими аспектами наложения текстур в главе 9. Несколько СЫ1-процедур матричных преобразований (п1иОгтйо2ОО, к1цРегзресгзуеО, к1о~ооКА((), 01врго)ест(), п1цппрго)ес(О и п1нппрго)есгйО) описаны в главе 3.
Об использовании к1црт скиа1 г ! х () говорится в главе 13. Средства С1Л) Х()ВВБ, надггроенные поверх вычислителей ОрепС(., представлены в главе 12. Нам осталось мтронуть только две темы, связанные с Сз1(): мозаичное представление многоугольников и квадратичные (второго порядка) поверхности; зги темы обсуждаются в данной главе. С целью достижения лучшей производительности основные средства ОрепС1. юспроизводят только выпуклые многоугольники, но С(.() содержит подпрограммгп для превращения выпуклых многоугольников в вогнутые. В то время как осповньге средства ОрепС( оперируют простыми примитивами, такими как точхп, линии и закрашенные многоугольники, СЫ1 способна создавать объекты более высокого уровня, такие как сферические поверхности, цилиндры и конусы. 3та глава включает в себя следующие основные разделы: ° Мозаичное представление многоугольников.