DonNews #11
21 апреля 2000

Кодинг - Заливка замкнутой области на экране.

<b>Кодинг</b> - Заливка замкнутой области на экране.
──────────────────────────────────────────
Disabler/DPL

   Заливка замкнутой области на экране

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

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

  Итак, пусть у нас есть замкнутая область
на экране (Рис. 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: Поставить точку на экране можно сле-
дующим образом:

; (c) 1996 Disabler/DPL
; A, C - Coordinates
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

P. P. S: В приложении есть  исходняки, ре-
ализующие все вышеописанные алгоритмы.


             See You, May Be!


                      Disabler 25.Feb'2000



Другие статьи номера:

От авторов - Причины задержки номера.

Новости - Состояние дел у Ростовских спектрумистов: Disabler, Klim, Wild, Dimon, The Rom.

Paradox 2k - Информация о ростовской demo-party: paradox 2k

Millennium party - Информация о проведении Минского демопати.

Forever 2E3 results - Финальные результаты.

Софт - Описание компилятора С для спектрума.

Софт - небольшой обзор системного софта: UltraSonic version 2.,Shuffle Commander v1.0, Elastic Copy v1.0, Strange Player v3.0, Screen Mixer v1.0, ZX C++, Smagly 3, Quick Commander 2.4.

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

Кодинг - Заливка замкнутой области на экране.

кодинг - Алгоритм спектрального анализа звука в реальном времени.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Inferno - Письма в редакцию.
Обзор - Обзор новых журналов: Rush #1, Adventure #9, Scenergy #1, ZX-Power #3, Miracle #3.
Обьявления - документальный фильм о фестивале Paradox'99.
Миска - ОС будущего для SPECCY.
Интерфейс - Cheat к игре Heavy Metal Mover. Мнение об ассемблере (какой лучше ?). Вопросы по адвентюрным играм: Last Raider, Витязь Святогор и колдун Карачун, Средневековая история.

В этот день...   1 января

SibNews #08, Woot! #01, Spectrum Magazine #01, ACNews #25, Psychoz #14, ACNews #14, Last 128 #08, Last 128 #06, Last 128 #05, Last 128 #04, Last 128 #03, Last 128 #02, Last 128 #09, Last 128 #3.5, Last 128 #8.025, Sinclair Club #05, Last 128 #M!R 01, Fantadrom #01, Buzz #20, Last 128 #01, DonNews #13, Nicron #120, Promised Land #01, Inferno #01, Marazm #25, Ultimathum #01, Marazm #21, Hooy Mag #02, KrNews #11, Marazm #22, Marazm #23, ZX Football 2000 #01, Codemania #01, Always #03, Bugs #02, IzhNews #08, Virtual Worlds #01, Listok #04, Scenergy #02, Flash Info #18, Marazm #16, Marazm #17, Zed #01, Balagan #02, ZX Format #08, ZX Power #03, Shock #01, Impulse #02, Deja Vu #03, ZX Club #08, ZX Club #06, Numberology #01, Marazm #13, Marazm #12, Marazm #14, Gorodok #02, Zodiac #01, Marazm #15, Deja Vu #07, Marazm #11, Deja Vu #07, Playboy #03, Crazy News #2, Crazy News #4, ZX Light #01, Crazy News #5, Playboy #02, ZX News #03, ZX Review #1-2, Read Me #02, Crazy News #3, Nicron #13, Read Me #01, Public Spirit #01, Faultless #06, Faultless #05, ZX Software #01, Stump #04, Speccy #07, Возраждение #0, Speccy #03, On-Line #17, Scene+ #01, Welcome Press #01, ZX Konig #04, Adventurer #01, Faultless #05, Faultless #04, Di Halt #01, Faultless #01, Playboy #01, Crazy News #1, Faultless #03, Pioneer #03, Sinclair Town #02, ZX Magazine #01, Eldorado #01, ZX Magazine #02, Spectron #01, ZX News #01, ZX Konig #02, 200 #W, Welcome Press #00, Dune #07, Subliminal Extacy #01, Subliminal Extacy #02, ZX Konig #01, Subliminal Extacy #00, Muchomor #01, Spectrofon #01, ZX Revija #02, Outlet #01, Outlet #1-3