Логотип.
 Разделы сайта Cтатьи.
Сайт в разработке!

Статистика сайта.

Посещений за день: 230
Посещений за месяц: 1872
Посещений за год: 13917


Баннеры.

DMconnect
Maksy's PWS


Статистика в картинках.

likes counter


  • Главная.
  • Новости.
  • Программы.
  • Файлы.
  • Контакты.
  • Чат "Пиво".
  • Форум.
  • Статьи.
  • Ссылки.
  • Гостевая.
  • Заливка замкнутой области на экране.

     Сегодня вам предстоит узнать о такой вещи, как заливка. Сразу замечу, что зали вать будем не полигоны и прочее, а просто замкнутую область на экране, причём об ласть может быть ограничена как единичны ми, так и нулевыми точками. Заливать будем сплошным цветом, т. е. без текстуры (о за ливке текстурой будет сказано ниже).

      Алгоритм заливки прост до безобразия и вместе с тем работает довольно быстро.

      Итак, пусть у нас есть замкнутая область на экране (Рис. 1) и точка внутри этой об ласти с координатами X и Y.

              ■■■■■■■■■
         ■■■■■         ■■■■■    ■■■■
        ■                   ■■ ■    ■■
        ■            ■(X,Y)   ■       ■■
        ■                               ■
         ■■■■                         ■■
             ■■■■■■■■■■■■         ■■■■
                         ■■■■■■■■■
        Рис.1
    

      Нам понадобятся два буфера размером 1024 байта каждый (на 512 точек). А теперь по порядку:

      1. Помещаем в буфер #1 координаты нашей точки (X, Y) и запоминаем количество поло женных точек (в нашем случае - 1).

      2. Берём точку из буфера #1 и помещаем нулевые точки вокруг неё в буфер #2 и од новременно делаем их единичными. И так до тех пор, пока не обработаем все точки из буфера #1 (Рис. 2).
              ■■■■■■■■■
         ■■■■■         ■■■■■    ■■■■
        ■            ■      ■■ ■    ■■
        ■           ■■■       ■       ■■
        ■            ■                  ■
         ■■■■                         ■■
             ■■■■■■■■■■■■         ■■■■
                         ■■■■■■■■■
       Рис.2
    

      3. Берём точку из буфера #2 и помещаем нулевые точки вокруг неё в буфер #1 и од новременно делаем их единичными. Повторяем для всех точек из буфера #2 (Рис. 3).
              ■■■■■■■■■
         ■■■■■       ■ ■■■■■    ■■■■
        ■           ■■■     ■■ ■    ■■
        ■          ■■■■■      ■       ■■
        ■           ■■■                 ■
         ■■■■        ■                ■■
             ■■■■■■■■■■■■         ■■■■
                         ■■■■■■■■■
       Рис.3
    

      4. Переходим к пункту 2.

      Алгоритм завершается в том случае, если в одном из буферов не окажется ни одной точки.

      Заливка текстурой.
      Заливка текстурой не отличается от сплошной заливки буквально ничем, кроме одного - понадобится буфер #3 размером 6144 байта. Итак, поехали:

      1. Копируем экран в буфер #3
      2. Заливаем сплошной заливкой область на экране.
     
      Обрабатываем побайтно весь экран:
      3. Бeрём байт экрана (scr), складываем по xor с байтом из буфера #3. Таким обра зом получаем маску по которой будет накла дываться текстура (mask).
      4. Бeрём старший байт текущего адреса экрана и выделяем младшие три бита (and 7 или and %00000111) - это смещение относи тельно начала текстуры (textur).
      5. Берём байт textur, инвертируем, дела ем and mask и xor scr,после чего ложим его на место scr.
      6. Увеличиваем адрес на единицу и пере ходим к пункту 3. И так 6144 раза.

      P. S: Поставить точку на экране можно сле дующим образом:
    	point  call 8880
    	       add a,a
    	       add a,a
    	       add a,a
    	       ld b,a
    	       ld a,#fe
    	       sub b
    	       ld ($+4),a
    	       set 0,(hl)
    	       ret
    

    >>

    BitByByte, 2000 г. (2026).