|
|||
| Разделы сайта | Cтатьи. |
Статистика сайта.
Посещений за день: 230 Баннеры. Статистика в картинках. |
|
|
|
Заливка замкнутой области на экране.
Сегодня вам предстоит узнать о такой
вещи, как заливка. Сразу замечу, что зали
вать будем не полигоны и прочее, а просто
замкнутую область на экране, причём об
ласть может быть ограничена как единичны
ми, так и нулевыми точками. Заливать будем
сплошным цветом, т. е. без текстуры (о за
ливке текстурой будет сказано ниже).
■■■■■■■■■
■■■■■ ■■■■■ ■■■■
■ ■■ ■ ■■
■ ■(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). | |||