(01010101,11111111, 10000101) <-операция OR надЛиЯ.

Каждый бит пиксел пиксельной карты С равен 1, если любой из соответствующих бит карт Л и В (или оба сразу) равен 1. Если же мы произведем над An В операцию EXCLUSIVE OR (XOR - исключающее ИЛИ), то получим: С = (01000000,10001111,10000101) <- операция XOR над Л и Б.

В этом случае каждый бит карты С равен единице, если ровно один из соответствующих бит карт А и В равен 1 - это значит, что один бит, но не два, должен равняться 1. Цвет С = Л XOR В зависит от цветов Л и Б сложным образом (см. упражнения в конце раздела). Ответьте на вопрос, чему равно А XOR В, если: О В = (0, 0, 0) (черный); О В = (255,255, 255) (белый)?

10.3. Объединение пиксельных карт

Интересное свойство операции XOR заключается в том, что двукратное ее применение эквивалентно тому, как если бы ее не применяли вообще; это значит, что если С = A XOR В, то при операции С XOR В мы имеем (Л XOR В) XOR В, то есть снова Л! (См. упражнения.) Мы вернемся к этому свойству позднее, при применении для формирования изображений «метода резиновой нити» («rubber banding»).

В языках типа С++ прямо поддерживаются побитовые логические операции, поэтому естественно выполнять их внутри подпрограммы. Например, для логического сложения (OR) зеленых компонентов карт Л и В достаточно выполнить команду С.д=А.д|В.д. Аналогично для выполнения над красными байтами операции исключающего ИЛИ (XOR) мы пишем: C.r=Â.rAB.r.

Остальные операторы включают AND, NOT и их комбинации. При логическом умножении (AND) двух величин, что для зеленого компонента на С++ имеет вид С.д=А.д&В.д, каждый бит в С.g равен 1 только тогда, когда оба соответствующих бита в картах Л и Б равны 1. Если над величиной произведена операция отрицания (дополнения) NOT, то представление на С++ имеет вид: C.g=-A.g, то есть каждый бит карты С равен 1 тогда и только тогда, когда соответствующий бит карты Л равен 0.

Можно было бы использовать эти логические операторы С++ для попиксельного комбинирования двух пиксельных карт, однако в OpenGL, к счастью, предусмотрен механизм комбинирования двух карт целиком за одно обращение. После того как логическая операция выбрана и запущена, все последующие операции рисования выполняют цикл чтение-модификация-запись пикселов источника с пикселами, находящимися в данный момент в буфере кадров.


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