Михаил Краснов - Графика DirectX в Delphi

Здесь есть возможность читать онлайн «Михаил Краснов - Графика DirectX в Delphi» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Графика DirectX в Delphi: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Графика DirectX в Delphi»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Графика DirectX в Delphi — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Графика DirectX в Delphi», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Здесь, помимо поверхности FDDSZoom, введена поверхность FDDSDouble. Для первой из них в качестве ключа взят чистый зеленый цвет, как отсутствующий на фоне. Вторая поверхность создается путем загрузки изображения-шаблона - зеленый квадрат с черным кругом посередине. Ключом для нее установлен черный цвет.

Теперь на поверхность лупы последовательно помещаем растянутый участок фона, затем ограничивающий шаблон:

SetRect (wrkRect, mouseX + 25, mouseY + 25, mouseX + 75, mouseY +- 75);

// Растягиваем участок фона

FDDSZoom.Blt (nil, FDDSBackGround, @wrkRect, DDBLT_WAIT, nil);

// Вместо черных участков шаблона останется увеличенный фрагмент

FDDSZoom.BltFast (О, О, FDDSDouble, nil,

DDBLTFASTJMAIT or DDBLTFAST^SRCCOLORKEY);

// Зеленая канва не воспроизведется FDDSBack.BltFast (mouseX, mouseY, FDDSZoom, nil,

DDBLTFAST_WAIT or DDBLTFAST_SRCCOLORKEY);

Позже мы вернемся к задаче с лупой и получим искаженное изображение в ее круге.

Палитры

Для хранения отдельного набора цветовых составляющих палитры используется переменная типа TPaietteEntry. Переменная типа iDirectDrawPaiette, как мы знаем из предыдущих примеров, служит для установления определенной палитры 8-битной поверхности. Обычно такая палитра загружается из растра.

В любой момент времени мы можем получить набор палитры и модифицировать его, как это делается в следующем нашем примере (проект каталога Ех23). За основу взят проект с перемещающимся драконом, но здесь с течением времени экран становится тусклым, имитируется суточная смена освещенности. Дойдя до некоторой фазы, восстанавливается первоначальная яркость. Такой эффект постепенного угасания называется fade (затухание). Разберем, как он создается.

Для хранения первоначальной палитры предназначен массив:

DefPal : Array[0..255] of TPaietteEntry;

Массив заполняется после загрузки палитры из растра, для чего вызывается

Метод Палитры GetEntries:

hRet := FDDpal.GetEntries(0, 0, 256, @DefPal);

if Failed (hRet) then ErrorOut(hRet, 'Palette GetEntries');

При каждом перемещении образа во всех составляющих текущей палитры убавляются веса цветов, используется локальный массив palEntries:

// Получаем составляющие текущей палитры экрана FDDpal.GetEntries(О, О, 256, @PalEntries) ;

for i := 0 to 255 do begin // Цикл по всем элементам палитры

if PalEntries[i].peRed > Step then PalEntries[i].peRed :=

PalEntries[i].peRed - Step;

if PalEntries[i].peGreen > Step then PalEntries[i].peGreen :=

PalEntries [i] .peGreen - Step

if PalEntries[i].peBlue > Step then PalEntries[i].peBlue :=

PalEntries[i].peBlue - Step;

end;

// Устанавливаем текущей палитру, образованную элементами массива

FDDPal.SetEntries(0, 0, 256, @PalEntries);

Timer := (Timer + 1) mod 100;

// Восстанавливаем первоначальную палитру

if Timer = 0 then FDDpal.SetEntries(0, 0, 256, @DefPal);

Эффект угасания часто применяется для необычного завершения работы приложения.

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

Рассмотрим простейший пример на эту тему - проект каталога Ех24. Фон представляет собой рисунок, построенный серией эллипсов, нарисованных оттенками серого; цвета повторяются в каждой серии (рис. 3.12).

Равномерно удаленные компоненты палитры с течением времени последовательно - фото 20

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

Целочисленная переменная kr задает текущую незатемняемую палитру и изменяется от шестнадцати до двух, уменьшаясь на каждом шаге:

function TfrmDD.UpdateFrame : HRESULT;

var

k : Integer;

DefPal : Array[0..255] of TPaletteEntry; // Массив цветов палитры

hRet : HRESULT;

begin

ThisTickCount := GetTickCount;

if ThisTickCount - LastTickCount > 10 then begin

// Берем текущую палитру

hRet := FDDPal.GetEntries(0, 0, 256, SDefPal);

if Failed (hRet) then begin Result := hRet;

Exit;

end;

for k := 0 to 14 do begin // Затемняем предыдущий цвет палитры

DefPal [kr * 15 + k].peBlue := 0;

DefPal [kr * 15 + k].peRed := 0;

DefPal [kr * 15 + k].peGreen := 0;

end;

Dec (kr); // Переходим к следующему цвету палитры

if kr < 2 then kr := 16;

for k := 0 to 14 do begin // Подменяем текущий цвет желтоватым

DefPal [kr * 15 + k].peBlue := 0;

DefPal [kr * 15 + k].peRed :== 128;

DefPal [kr * 15 + k].peGreen := 100;

end;

// Устанавливаем измененную палитру

hRet := FDDPal.SetEntries(0, 0, 256, @DefPal);

if Failed (hRet) then begin Result := hRet;

Exit;

end;

LastTickCount := GetTickCount;

hRet := FDDSPrimary.Flip(nil, DDFLIP_WAIT);

if Failed (hRet) then begin Result := hRet;

Exit;

end;

end;

Result := DD_OK;

end;

Обратите внимание, что при запуске и восстановлении приложения появляется первоначальная фоновая картинка, поскольку затеняются "ненужные" цвета палитры только после первого прохождения значения kr по кругу.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Графика DirectX в Delphi»

Представляем Вашему вниманию похожие книги на «Графика DirectX в Delphi» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Графика DirectX в Delphi»

Обсуждение, отзывы о книге «Графика DirectX в Delphi» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x