|
DonNews
#11
21 апреля 2000 |
|
Кодинг - Заливка замкнутой области на экране.

────────────────────────────────────────── 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
Другие статьи номера:
Похожие статьи:
В этот день... 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