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

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

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


Читайте также:
  1. В10 Перечислите возможные неисправности в кабельной линии. Опишите методы определения зоны и места повреждения в кабельной линии.
  2. ГИДРАВЛИЧЕСКИЙ ГАСИТЕЛЬ КОЛЕБАНИЙ ВЕРТИКАЛЬНОЙ НАВОДКИ
  3. Задание направления выработкам в вертикальной плоскости
  4. Листинг 11.2. Структура данных игрока.
  5. Листинг 11.3. Функции полета мухи.
  6. Листинг 11.4. Муравейник (ANTS.С).
  7. Листинг 11.5. Падение мяча (BALL.C).

void V_Line(int yl,int y2,int x,unsigned int color)

{

//рисуем вертикальную линию (у2 больше yl)

unsigned int line offset,

index;

// вычисляем начальную позицию

line_offset = ((y1<<8) + (y1<<6)) + x;

for (index=0; index<=y2-y1; index++)

{

video_buffer[line_offset] = color;

line_offset+=320;

// переходим к следующей линии

} // конец цикла for

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

Функция V Line несколько длиннее Н Line, поскольку она сама производит все адресные вычисления. Эта функция фантастически эффективна - вспомните пример использования сдвига вместо умножения (кстати, если вы до сих пор не поняли смысл двоичного сдвига, не отчаивайтесь - в восемнадцатой главе, «Техника оптимизации», мы это подробно изучим).

Прежде чем перейти к следующей теме, я хочу дать вам замечательную программу, которая создает новую палитру и выводит ее на экран, используя функции рисования вертикальных линий. В ней встречается уже известная функция Set_Mode(), описанная во второй главе, поэтому здесь я не включил ее исходный код. При желании вы можете взять его из второй главы. Более того, эта функция объявлена в программе как EXTERNAL, так что ее можно просто прилинковать. Листинг 5.8 содержит необходимый код программы Show_Palette.

Примечание

Я обнаружил некоторую проблему с чтением регистра палитры на VGA-картах. Похоже, что вы не всегда можете получить доступ к требуемому вам регистру. Это ошибка «железа», и она характерна для отдельных VGA-карт. Я решил эту проблему довольно примитивным способом: просто дважды читаю каждый регистр. Вроде, мне это помогло. В своих программах вы можете попробовать включать дополнительные проверки и использовать разные функции для чтения регистров палитры в случае обнаружения ошибки. Во всяком случае, время, потраченное на решение данной задачи с лихвой окупится в процессе выполнения программы.

 


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


<== предыдущая страница | следующая страница ==>
Листинг 5.6. Рисование горизонтальной линии.| Листинг 5.8. Создание и отображение цветовой палитры (PALDEMO.C).

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