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

Листинг 5.3. Создание новой цветовой палитры.

МЕХАНИЗМЫ ДВУХМЕРНОЙ ГРАФИКИ | Листинг 4.1. Программа, рисующая точки (POINTY.C). | Листинг 4.2. Программа, рисующая линии (LINER.С). | Листинг 4.4. Структуры данных для задания вершин объектов. | Листинг 4.5. Описание астероида. | Листинг 4.6. Масштабирование астероида. | Листинг 4.7. Вращение объекта. | Листинг 4.8. Программа, которая рисует поле астероидов (FIELD.С). | Листинг 4.9. Определение и умножение двух матриц. | Листинг 4.11. Супер Астероиды (FIELD.C). |


Читайте также:
  1. Chernyakov@yandex.ru ТЕМА: СОЗДАНИЕ МОБИЛЬНОГО ИНФОРМАЦИОННОГО РЕСУРСА
  2. I ЭТАП - создание фирменного стиля
  3. RADARMED 650. Универсальный аппарат для импульсной и непрерывной микроволновой терапии
  4. RADARMED 950. Универсальный аппарат для импульсной и непрерывной микроволновой терапии
  5. struct Query Queue[20]; // создание очереди
  6. VII. В 4-5 предложениях расскажите о новой европейской валюте на французском языке.
  7. А) создание производственного ассортимента

void Create_Cool_ Palette(void)

{

// эта функция создает новую палитру, содержащую по 64 оттенка

// серого, красного, зеленого и синего цветов

RGB_color color;

int index;

// в цикле последовательно создаем цвета и меняем значения регистров

for (index=0; index < 64; index++)

{ // это оттенки серого

color.red = index;

color.green = index;

color.blue = index;

Set_Palette_Register(index, (RGB_color_ptr)&color);

// это оттенки красного

color.red = index;

color.green = 0;

color.blue = 0;

Set_Palette_Register(index+64, (RGB_color_ptr)&color);

// это оттенки зеленого color.red = 0;

color.green = index;

color.blue = 0;

Set_Palette_Register(index+128, (RGB_color_ptr)&color);

// это оттенки синего

color.red = 0;

color.green = 0;

color.blue = index;

Set_Palette_Register(index+192, (RGB_color_ptr)&color);

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

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

Наличие возможности изменения цветовой палитры позволяет нам создавать различные интересные эффекты освещения и анимации в наших играх. (Например, как сделаны цветовые эффекты в DOOM'e? Часть цветовой палитры изменяется «на лету» во время игры.) Так достигаются эффекты освещения и стрельбы. Это особенно хорошо для реализации эффекта «отключения света».

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

Цветовая ротация

Когда я купил свой первый компьютер в 1978 году (хотя я до сих пор уверен, что это был божий дар) я был глубоко поражен компьютерной графикой и видеоиграми. Компьютер назывался Atari 800. В то время это было пределом возможностей. Один из интересных эффектов, который он поддерживал, назывался цветовой ротацией. Цветовая ротация может быть выполнена только на компьютерах, имеющих таблицу преобразования цветов. Как известно, изображение рисуется на экране компьютера. Например, пусть это будет водопад. Изображение водопада состоит (в нашем случае) из 16 оттенков синего цвета, каждый из которых — это число, ссылающееся в таблице преобразования на соответствующее значение цвета. Мы получаем, что водопад содержит 16 оттенков синего, находящихся в регистрах цвета с адресами от 100 до 115.

Теперь представьте, что мы берем одно из значений и сдвигаем его в следующий регистр и так далее до 115-го, содержимое которого переносим в 100-й регистр. Что произойдет? Правильно, возникает ощущение движения. Уже в 70-х годах это было возможно на процессорах 6502 с тактовой частотой 1.79МГц.

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

Рисование точки

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

Как мы узнали чуть раньше, для рисования точки нам достаточно вычислить адрес смещения относительно начала видеобуфера (А000:0000) и записать байт, отображающий ее цвет. Больше ничего делать не надо. Листинг 5.4 содержит фрагмент кода, который рисует точку определенного цвета с координатами Х и Y.


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


<== предыдущая страница | следующая страница ==>
СЕКРЕТЫ VGA-КАРТ| Листинг 5.4. Рисование точки в позиции (х,у).

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