В рассматриваемом режиме регистр BitMask позволяет защищать от изменения определенные пикселы. В тех позициях, где соответствующий бит из регистра BitMask равен нулю, пиксел не изменяет своего значения. Регистр MapMask позволяет защищать от изменения определенные плоскости.

Биты 3 и 4 регистра DataRotate определяют способ наложения выводимого изображения на существующее (аналогично функции setwritemode).

Значение битов

Операция

Эквивалент в BGI

0 0

Замена

COPY PUT
0 1 Or OR PUT
1 0 And AND PUT
1 1 Xor XORJPUT

Процедура setWriteMode устанавливает соответствующий режим наложения. Посланный процессором байт циклически сдвигается вправо на указанное в битах 0-2 регистра Data Rotate количество раз.

Компьютерная графика. Полигональные модели Результирующее значение определяется следующим образом. На плоскость, соответствующий бит которой в регистре Enable Set/Reset равен нулю, накладывается посланный процессором байт, "прокрученный" заданное количество раз, с учетом регистров BitMask и MapMask. Если соответствующий бит равен единице, то во все позиции, разрешенные регистром BitMask, записывается бит из регистра Set/Reset, соответствующий плоскости.

На практике наиболее часто встречаются следующие два случая:

Enable Set/Reset = 0 (байт, посланный процессором, циклически сдвигается в соответствии со значением битов 0-2 регистра Data Rotate; после этого получившийся байт заданным способом (см. биты 3-4 регистра Data Rotate) накладывается на те плоскости, которые разрешены регистром Map Mask, причем изменяются лишь разрешенные регистром BitMask биты);

Enable Set/Reset = OF (в позиции, разрешенные регистром BitMask, ставятся точки цвета, заданного в регистре Set/Reset; байт, посланный процессором, никакой роли не играет).

Для того чтобы нарисовать только нужный пиксел, необходимо поставить регистр BitMask так, чтобы защитить от изменения остальные 7 пикселов, соответствующих этому байту.

S // File WritePxl.cpp

void writePixel (int x, int у, int color) {

char far * vptr = (char far *) MK_FP (OxAOOO, y*80+(x»3));

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