void setPaletteDirect ( RGB palette [] )
{
// wait for vertical retrace while ( (inportb (0x3DA) & 0x08) != 0 )
while ( (inportb (0x3DA) & 0x08) == 0 )
outportb ( 0x3C8, 0 ); for ( register int i = 0; i < 256; i++ )
{
outportb ( 0x3C9, palette [i].red » 2 )
outportb ( 0x3C9, palette p].green » 2 )
outportb ( 0x3C9, palette [ij.blue » 2 )
}
}

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

Сдвиг цветовых компонент палитры необходим, поскольку только младшие 6 бит DAC-регистра являются значащими.

4.9.5. Спрайты и работа с ними Понятие спрайта появилось в связи с разработкой компьютерных игр. Под спрайтами обычно понимают небольшие графические объекты (изображения), которые находятся на игровом поле, могут двигаться и изменять свою форму (например, идущий человечек - при этом циклически выводится набор изображений, соответствующих .разным фазам движения). На некоторых компьютерах (Atari, Amiga, Yamaha) спрайты реализованы аппаратно.

Поскольку на IBM PC аппаратной поддержки спрайтов нет, то поддержка должна осуществляться на программном уровне.

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

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

полностью перерисовать весь экран (фон, на который будут потом выводиться спрайты);

перед выводом спрайта запомнить участок изображения, которое он собой закрывает, и потом восстановить этот участок.

В зависимости от типа игры предпочтительнее оказывается тот или другой подход. Рассмотрим класс, отвечающий за программную реализацию спрайта (при этом предполагается, что установлен 256-цветнын режим с линейной адресацией памяти).


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