Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Листинг 5.6. Рисование горизонтальной линии.

Листинг 4.4. Структуры данных для задания вершин объектов. | Листинг 4.5. Описание астероида. | Листинг 4.6. Масштабирование астероида. | Листинг 4.7. Вращение объекта. | Листинг 4.8. Программа, которая рисует поле астероидов (FIELD.С). | Листинг 4.9. Определение и умножение двух матриц. | Листинг 4.11. Супер Астероиды (FIELD.C). | СЕКРЕТЫ VGA-КАРТ | Листинг 5.3. Создание новой цветовой палитры. | Листинг 5.4. Рисование точки в позиции (х,у). |


Читайте также:
  1. В10 Перечислите возможные неисправности в кабельной линии. Опишите методы определения зоны и места повреждения в кабельной линии.
  2. Листинг 11.2. Структура данных игрока.
  3. Листинг 11.3. Функции полета мухи.
  4. Листинг 11.4. Муравейник (ANTS.С).
  5. Листинг 11.5. Падение мяча (BALL.C).
  6. Листинг 11.6. Идеальный газ (GAS.C).
  7. Листинг 12.2. Шпионим за часами (SPY.C)._________________

void H_Line (int х1, int x2, int y, unsigned int color)

{

// функция рисует горизонтальную линию, используя memset()

// x2 должно быть больше х1

_fmemset ((char far *) (video_buffer + ((у << 8) + (у <<6)) + х1), color, x2 - х1 + 1);

} // конец функции

Следует кое-что запомнить:

§ Мы используем функцию _fmemset, поскольку она, в отличие от memset, корректно работает с дальними (FAR) указателями;

§ Мы вычисляем начальный адрес линии, и функция заполняет определенное количество байтов заданным значением цвета;

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

К сожалению, мы не можем использовать семейство функций memset для рисования вертикальных линий, поскольку они работают только с непрерывными областями памяти. В случае вертикальных линий каждый следующий пиксель отстоит на 320 байт от предыдущего. Если вы находитесь в какой-то точке и хотите рисовать линию вниз, то вам надо прибавлять 320, а если линия рисует вверх, то надо вычитать 320 из текущего адреса. Таким образом, мы можем создать цикл, который увеличивает адрес на 320 и рисует вертикальную линию в виде пикселей сверху вниз. Листинг 5.7 демонстрирует код этой функции.


Дата добавления: 2015-07-12; просмотров: 149 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Листинг 5.5. Программа быстрого рисования точки.| Листинг 5.7. Рисование вертикальной линии.

mybiblioteka.su - 2015-2024 год. (0.008 сек.)