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