Основная сложность в управлении процессом формирования смешанного изображения состоит в том, что на результат влияет порядок формирования образов многоугольников, который очень сложно контролировать из прикладной программы. Например, в некоторых приложениях используется режим, когда коэффициент смешивания источника приравнивается к значению a, a коэффициент смешивания приемника- к значению ( 1-<х). В результате после выполнения смешивания очередного изображения получим:

(Rd-, Gj-, Bj; eg.) = (aMl-aA asG+( 1 -as)Gj, asBs+(\-<xs)Bj, а,а^-(\-аМ.

402 Глава 9. Операции с изображением на уровне растрового представления Эта формула показывает, что результат будет корректен как для прозрачных, так и для непрозрачных объектов, но он все-таки существенно зависит от того, в каком порядке будут обрабатываться объекты при растровом преобразовании. Следовательно, в отличие от других случаев, когда прикладной программе не было никакого дела до порядка обработки объектов при растровом преобразовании, в данном случае желаемый эффект может быть получен только при условии соблюдения определенного порядка.

При использовании смешивания изображений возникает проблема и с механизмом удаления невидимых поверхностей. Обычно в такой ситуации этот механизм нужно отключать, поскольку он не делает различия между непрозрачными и прозрачными объектами, а следовательно, любой объект, который расположен за другим объектом, пусть он даже имеет коэффициент поглощения 0.01, просто не будет подвергаться растровому преобразованию и никак не "проявится" в результирующем изображении. Нам же нужно, чтобы те объекты, которые расположены за полупрозрачными объектами, включались в изображение. Этого можно достичь достаточно простым приемом, управляя маской обновления z-буфера. Дело в том, что для определенных объектов, в данном случае - прозрачных, можно при работе с z-буфером выборочно настраивать режим "только для чтения". Для этого следует вызывать функцию

glDepthMask(GL_FALSE);

Когда буфер глубины работает в режиме "только для чтения", прозрачный объект, расположенный за непрозрачным, образ которого уже сформирован, растровому преобразованию подвергаться не будет. Если же прозрачный объект расположен перед непрозрачным, то он будет подвергаться растровому преобразованию, но в результате сформируется смешанный цвет. При этом данные о глубине размещения прозрачного объекта в буфер глубины занесены не будут. При обработке непрозрачных объектов восстанавливается нормальный режим работы z-буфера, и процесс идет как обычно. Программа, демонстрирующая методику смешивания цветов, находится в файле blend.с.


⇐ Предыдущая| |Следующая ⇒