М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 62
Текст из файла (страница 62)
11'тп", зоовйас(ог); ьгеах; сазе 'Х': хооврас1ог -= 0.5; ! 1 (хоовйастог <= 0.5) хоовуасСог = 0.5; рг1птт("текущее значение масштабного коэффициента %4. 1('тп", хоовуасгог); Ьгеах; сазе 27: ех1С(0); Ьгеах; бе!ам(С: Ьгеах; ) ) Чтение и рисование прямоугольных областей Этот раздел подробно описывает процесс чтения и отображения прямоугольных областей пикселов. Преобразование при чтении из буфера кадров в память похо. же на преобразование в обратном направлении — рисование, но не идентично ему. Материал этого раздела не обязателен при первом чтении, особенно если вн не планируете сразу начать выполнять подобные преобразования.
Процесс вывода пиксельного прямоугольника Следующий список и рпс. 8.12 описывают операции отображения пикселов в буфер кадров. 1. Если пикселы представлены не индексами (то есть их формат отличен от 61 СОСОК 1ИОЕХ или 6с 5ТЕИС1С 1ИОЕХ), на первом шаге компоненты преобразуются в числа с плавающей запятой. (Подробности преобразования представлены в табл. 4.1.) 2, Если задан формат 6С СОМ!МАИСЕ нли 6с 'сОМ1ИАИСЕ АЕРНА, элемент яркости преобразуется в компоненты К, О и Б с назначением равной доли каждому Чтение и рисование прямоугольных областей 289 компоненту.
Если формат — 6С СОН1МАМСЕ АСРНА, величина альфа-компонента равна значению А, которое, если указан параметр 6С СОН1НАИСЕ, устанавливается в 1.0. Рис. 8.12. Рисование пиксепов с помощью фогааР!хек() 3. Каждый компонент (К, С, В, А или глубина) умножается на соответствующий размерный козффициент, с добавлением смешения (Ь(аз).
Например, компонент К умножается на величину 6С РЕО 5САСЕ и после к нему добавляется значение 6 С Р Е Р В 1 А 5. Е Если параметр 6с НАР сосок установлен в таце, каждый из К-, О-, В- и А- компонентов, ограниченный диапазоном [0.0, 1.0), умножается на целое число, меньшее на единицу размера таблицы, обрезается и ищется в таблице подставовки.
(См. раздел «Советы по увеличению быстродействия вывода пикселов».) 5. Затем К-, С-, В- и А-компоненты ограничиваются диапазоном [0.0, 1.0[, если зто еще не сделано, и преобразуются в число с десятичной точкой с таким количеством битов левее точки, сколько нужно для помещения в буфер кадров. 5. Если вы работаете с индексами (цвета или трафарета), сначала значения пре- образуются в числа с десятичной точкой (если они исходно представлены 290 Глава 8 ° Вывод пикселов, битовых образов, шрифтов и изображений в формате с плавающей запятой), с некоторым количеством неопределенных битов справа от точки.
Для индексов, изначально представленных десятичными числами, любые биты справа от десятичной точки сбрасываются в нуль. Результирующее значение индекса сдвигается вправо пли влево в соответствии с абсолютным значением параметра 6С 1МОЕХ 5Н1ГТ; значение сдвигается влево, когда 6С 1МОЕХ 5Н1РТ > О, и вправо — в противном случае.
В заключение к индексу добавляется смешение 6ь 1мрех ОРР5ет. 7. Слелующий шаг зависит от используемой модели цвета — КСВА или инлексной. В первом случае индекс цвета преобразуется в КСВА с использованием параметров 6С Р1ХЕС МАР 1 ТО Р, 61 РХХЕС МАР 1 ТО 6, 6С РХХЕС МАР ! ТО В и 6С РХХЕС МАР 1 ТО А(см.
раздел «Табличные преобразования пикселов»). Во втором варианте, если 6С МАР СОСОР определен как 6С ТРОЕ, индекс цвета замещается по таблице подстановки 6С РХХЕС МАР 1 ТО 1. (Если 6С МАР СОСОР— 6С РАС5Е, индекс не изменяется.) Когда изображение представлено индексами трафарета и если 6С МАР 5ТЕМС1 С определен как 6С ТРОЕ, используется таблица подстановки 6С РХХЕС МАР 5 ТО 5. Если 6С МАР 5ТЕМСХС вЂ” РАС5Е, индекс трафарета ие изменяется. 8. Наконец, если индексы еще не конвертированы в КСВА, они маскируются к количеству битов, нужному для буфера индекса цвета нли трафарета. Процесс считывания пиксельного прямоугольника Многие из преобразований, имеюших место во время отображения пиксельного прямоугольника, применяются и в процессе чтения данных из буфера кадров.
Порядок чтения пикселов представлен следующим списком и на рис. 8.13. 1. Если читаемые пикселы не индексированы (то есть их формат отличен от 6Х СОСОР 1МОЕХ или 6С 5ТЕМСХС 1МОЕХ), они попалают в диапазон 10.0, 1.0~ — то есть имеет место противоположная процессу рисования ситуация. 2. Затем каждый компонент масштабируется со смегцением. Если параметр 6О МАР СОСОР равен 6С ТРОЕ, зги компоненты таблично преобразуются и снова сводятся к диапазону ХО.О; 1,0], При преобразовании от КСВ к яркости компоненты К, С и В суммируются (1 = К + С + В). 3. Если пикселы представлены индексами (цвета или трафарета), они сдвигают. ся (зП11теп), смещаются (оЪет) и, если параметр 6С МАР СОСОР установлен в 6С ТРОЕ, таблично преобразуются.
4. Если формат хРанения пикселов — 6С СОСОР 1МОЕХ или 6ь 5ТЕМСХС 1МОЕХ, индексы маскируются к количеству битов, поддерживаемому устройствои хранения (1, 8, 16 или 32), и упаковываются в память, как описано ранее. 5. Если формат хранения — один из компонентных типов (такой как яркость нлз КСВ), пикселы всегда таблично преобразуются по карте «индекс-в-КСВА». Тогда они интерпретируются так же, как если бы были пикселами КСВА и ранее (включая возможное преобразование к яркости).
6. Наконец, результаты предыдущих шагов упаковываются в память согласие режимам 6С РАСК', устанавливаемым РХР1хе15тоге» (). Чтение и рисование прямоугольных областей 291 о Рис. 8.13. чтение пикселов с помощью 9(аеак)Р!хе!з() Х, )и чи 'о- ее ОРИМЕЧАНИЕ Не исключено, что при выполнении чтения и отображения яркость будет вычислена некорректно. Так, вклад в яркость компонентов и, 6 и В в общем случае неодинаковый, что видно из рис.
8.12 и 8.13. При необходимости вычислить значение яркости согласно числам стандарта ЗО (а), 59 (6) и 11 (В) в процентах вы можете, установив параметр 6с аЕО 5САЕЕ в 0,3, 6с КЕО 81А5 — в 0 и т. д. Тогда величина с будет получена по формуле 0,30й + 0,596 + 0,118. но Значения для масштаба (зса)е), отклонения (Ъ|аз), сдвига (зЪЖ) и смещения (о((зе()— и же, что и для отображения пикселов. Поэтому если вы попеременно читаете а отображаете пикселы, не забывайте настраивать их под чтение и рисование. Ьалогично, предварительно должны быть инициализированы различные карты.
292 Глава 8 ° Вывод пикселов, битовых образов, шрифтов и иэображений Советы по увеличению быстродействия вывода пикселов Как вы могли увидеть, в ОрепСЕ имеется богатый набор возможностей для чтения, рисования пикселов и других манипуляций с ними. Хотя эти возможности часто очень полезны, они могут также отрицательно повлиять на производительность. Поэтому мы хотим дать несколько рекомендаций с целью предупредить такие явления илн просто для улучшения эффективности: ° Чтобы добиться максимальной скорости, установите все параметры передачи пикселов в значения по умолчанию, а масштабные коэффициенты — в (1.0, 1.0). ° При записи пикселов в буфер кадров к ним применяются операции над фрагментами.
(См. раздел «Тесты и операции над фрагментами» главы 10.) Для оптимальной производительности следует отключить эти операции. ° Отключите другие ресурсоемкие действия, такие как текстурирование и освешенне. ° Если вы воспользуетесь совместимым с буфером кадров форматом изображения, вы снимете с ОрепСЕ дополнительную нагрузку. Например, если вы записываете изображения в КСВ-буфер с 8-битовыми компонентами, установите при вызове я10ганР1хе1з О аргумент уогглаГ в значение КСВ и аргумент Гпре — в ОМ516МЕО ВУТЕ. ° В некоторых реализациях ОрепСЕ беззнаковые форматы изображений быстрее знаковых форматов.
я Обычно быстрее рисуется один большой прямоугольник, чем несколько маленьких, поскольку издержки на передачу пикселов сглаживаются на фоне их количества. ° По возможности уменьшайте обьем данных для копирования за счет менее емких типов (например, используйте 6Е ОМ516МЕО ВАХТЕ) и меньшего числа компонентов (например, используйте формат 66 ЕОН1МАМСЕ АЕРНА). ° Операции при передаче пикселов, будь то табличное преобразование, масштабирование, отклонение (Ь(аз), смещение (огТзег) илн сдвиг, со значениями ве по умолчанию, могут снизить производительность. Расширение 1тац1пц ЯиЬве1 Расширение!ша81п8 ВпЬзес (буквально — подмножество обработки изображений) — это совокупность программ, обеспечивающих дополнительные возможности процесса обработки изображений. С его помощью вы можете: ° использовать таблицы подстановки цветов для замешения значений пикселов; ° использовать свертки для фильтрации изображения; ° использовать матрицу преобразований цвета для преобразования цветового пространства и других линейных преобразований; Расширение 1гпарпд 50Ьзег 293 ° собирать статистику для гистограмм и получать информацию о минимальном в максимальном значениях компонента пвета.