Иллюстрированный самоучитель по SVGA

Точки и их адреса

Использование CallWln

В примере 3.5. показано, как можно поместить точку белого цвета в центр экрана. Будем считать, что переменные Horsize и versize содержат количество точек на экране по горизонтали и вертикали, белый цвет имеет код 0Fh, а регистр es содержит код сегмента видеобуфера.

Пример 3.5. Вывод белой точки в центр экрана.

mov dx, versize; количество точек по вертикали
shr dx, 01; уменьшаем в 2 раза
mov ex, horsize; количество точек по горизонтали
shr сх, 01; уменьшаем в 2 раза
call CallWin; устанавливаем окно и адрес
mov al, OFh; помещаем в al код белого цвета
mov es:[di], al; рисуем точку
; продолжение программы

Адреса каждой точки вычисляются тем или иным способом при любой работе с графическими объектами – от вывода на экран заранее подготовленного рисунка до построения сложных геометрических фигур. Поэтому эффективность любого алгоритма, предназначенного для работы с графикой, во многом зависит от того, как организована работа с адресами точек.

Наибольшее время занимает вычисление адреса каждой точки по значениям ее координат. Поэтому процедуры типа Caiiwin используются только для нахождения адресов опорных точек, начиная с которых производится построение изображения. Например, такой точкой может быть левый верхний угол прямоугольной области, в которой должен располагаться рисунок.

Адреса остальных точек изображения вычисляются упрощенными способами, в основе которых лежат рекуррентные соотношения, связывающие значения координат или адресов текущей и следующей точек.

Смежные точки и их адреса

Смежные точки расположены на экране монитора рядом друг с другом. Если опорная точка не лежит на границе экрана, то ее окружает 8 смежных точек. Их расположение показано в левой части табл. 3.3, где опорной является точка с номером 0. В правой части таблицы приведены приращения адресов видеопамяти смежных точек относительно адреса опорной точки. Для вычисления адреса смежной точки к опорному адресу прибавляется смещение, указанное в соответствующей ячейке таблицы. Буква b обозначает переменную Horsize.

Таблица 3.3. Расположение и адреса смежных точек.

Расположение точек Приращения адресов
8 6 7 -1-h -h 1-h
5 0 1 -1 0 1
4 2 3 h-1 h h+1

Замечание
Команды, выполняющие строковые операции, обязательно изменяют содержимое индексного регистра, поэтому после их выполнения он содержит адрес не текущей, а следующей точки. Аналогичная ситуация возникает и после выполнения цикла построения строки с использованием обычных команд. Поэтому при составлении программы разберитесь, какой именно адрес вы будете корректировать, – возможно, он уже увеличен на 1
.

При применении рекуррентных формул вычисленный адрес может выходить за пределы текущего окна. Например, горизонтальная линия может быть нарисована в таком месте экрана, что коды ее точек расположатся в двух соседних окнах, случай редкий, но вполне реальный. В зависимости от длины вертикальной линии коды ее точек могут располагаться сразу в нескольких окнах. Это обстоятельство надо учитывать при работе с адресами и своевременно изменять номера текущих окон.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.