Технология спрайтов - часть 4: форматы спрайтов с маской.

ZX Forum #04

             МАСКИ

   Что  касается  масок, то  тут
трудно было  бы  озаглавить  эту
статью  "Такие  РАЗНЫЕ   маски",
поскольку на  фронте  масок  все
спокойно и стандартизировано.
   Для начала давайте  разберем-
ся в том, что  же  такое  маска.
Посмотрите на спрайт из игры  3D
BATMAN;  Вы можете заметить, что
перед образом  самого  человечка
находится некоторый  рисунок, на
котором вместо человечка изобра-
жен его силуэт. Зачем  он нужен?
Все  очень  просто - при  печати
спрайта на экран прямым  копиро-
ванием  (LD A,(данные);  LD (эк-
ран),A или по-другому) мы  унич-
тожаем фон, который находился за
спрайтом, в результате чего вок-
руг спрайта  образуются  уродли-
вые  пустоты, что  портит  общее
впечатление от игры.  Вот здесь-
то и выходит на первый план мас-
ка.  Центральный процессор имеет
в своем арсенале  такую логичес-
кую команду, как AND. Что проис-
ходит с  экраном, если маску на-
ложить на экран при помощи  этой 
команды:

      байт экрана 11111111
      байт маски  11100111
                  --------
      результат   11100111

   Как видите, на экране  появи-
лось пространство с  выключенны-
ми пикселями. Кто-то уже, навер-
ное,  догадался:  действительно,
если  наложить  на  экран  маску
перед  тем,  как  печатать   сам
спрайт, на экране получится пус-
тое место - размером со  спрайт.  
Если теперь напечатать на  экран
спрайт не прямым копированием, а
объединить экран и спрайт по OR,
то спрайт впишется  в  очищенное
маской окно, и фон, который  на-
ходится  рядом  со  спрайтом, не
будет испорчен.
   Как создать маску.  После то-
го, как  ваш  спрайт  готов, ему
надобно создать  маску,  а  сде-
лать это очень  просто. Создание
маски можно разбить на 3 этапа:
   Сначала мы инвертируем  нари-
сованный спрайт (выключаем вклю-
ченные биты и включаем выключен-
ные), второй этап - стираем  все
внутри силуэта, и, наконец, тре-
тий этап - мы расширяем внутрен-
нее пространство маски на 1 пик-
сель.  Это нужно для того, чтобы
спрайт при печати не сливался  с
фоном, а отделялся от него поло-
ской толщиной в один пиксель.
   Ну вот, о маске вроде бы все.
Скажу лишь, что в  памяти  маску
хранят  в  том  же  виде, в  ка-
ком хранится соответствующий  ей
спрайт.