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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

i := First_Drip;

// Цикл по всем присутствующим на экране пятнам

while i <> New_Drip do begin

// Каждое пятно увеличивается в размерах

Drips [ i ]. Ring_Radius := Drips [i] .Ring_Radius + 1;

DrawCircle (Drips [i] . PosX,

Drips [i] .PosY,

Drips [i] .Ring_Radius,

Drips [i] .Ring_Color) ;

// Пятно достигло максимального размера, поэтому исчезает с экрана

if Drips [i] .Ring_Radius > Max_Ring_Radius

then First_Drip := (First_Drip + 1) mod Max_Drips;

i := (i+1) mod Max_Drips;

end;

Посмотрите работу данного примера для случаев, когда альфа-компоненты для центра и краев круга одинаковы и равны небольшой константе, или когда для точки центра таким значением берется 255, а для точек края - значение радиуса круга.

Размытие при движении

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

Оба способа используются в проекте каталога Ех04, где на экране быстро вращаются два круга: желтый оставляет полупрозрачный след, а за красным тянется постепенно угасающий след (рис. 8.3).

Рисование каждого круга сводится к выводу ряда близко расположенных примитивов - фото 66

Рисование каждого круга сводится к выводу ряда близко расположенных примитивов:

wrkGreen := 5;

for i := 1 to 10 do begin // 10 зеленых треугольников фона

wrkGreen := wrkGreen + 25;

hRet := DrawTriangle (ScreenWidth - (i + 1) * (ScreenWidth div 11),

ScreenWidth div 6, wrkGreen);

if FAILED(hRet) then begin

Result := hRet;

Exit;

end;

end;

wrkAngle := Angle;

wrkAlpha := 5; // Круги рисуются, начиная с самого прозрачного

with FDSDDevice do begin

SetRenderState(D3DRS__ALPHABLENDENABLE, DWORD(True));

SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);

SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

end;

for i := 1 to 10 do begin // 10 желтых кругов различной

wrkAngle := wrkAngle +0.04; // прозрачности

wrkAlpha := wrkAlpha + 25;

hRet := DrawYellowCircle (wrkAngle, wrkAlpha);

if FAILED(hRet) then begin

Result := hRet;

Exit;

end;

end;

FDSDDevice.SetRenderState(D3DRS_ALPHABLENDENABLE, DWORD(False));

wrkAngle := Angle + Pi;

wrkRed := 5; // Степень насыщенности красного

for i := 1 to 10 do begin // 10 красных кругов

wrkAngle := wrkAngle + 0.04;

wrkRed := wrkRed + 25;

hRet := DrawRedCircle (wrkAngle, wrkRed);

if FAILED(hRet) then begin

Result := hRet;

Exit;

end;

end;

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

Работа с переменным числом вершин

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

Как выяснилось из многочисленных предыдущих примеров, при использовании FVF-флага DSDFVF_XYZRHW в своих построениях мы опираемся на систему координат, ассоциированную с окном. Теперь нам предстоит постичь смысл еще одного флага: D3DFVF__XYZ. При его применении система координат экрана воспроизведения выглядит так: центру окна, независимо от его размеров, соответствует точка с координатами (0, 0), правому верхнему углу окна - (1, 1), левому нижнему углу - (-1, -1).

Пока мы ограничимся такой трактовкой этого флага, а позже узнаем о его особенностях кое-что дополнительно. Сейчас же для нас важно, что при использовании этого FVF-флага мы не сможем окрашивать вершины так, как привыкли это делать, и временно можем использовать только черно-белые картинки.

На примере проекта каталога Ех05 попробуем закрепить знания об этом флаге и попутно решим еще одну задачу: научимся работать с переменным числом вершин.

Самое простое решение задачи состоит, конечно, в том, чтобы задавать размер буфера вершин максимальным. Но такой прием приводит к неэффективному расходу памяти.

Во время работы программы на экране появляются узоры, образуемые отрезками, соединяющими равномерно расположенные точки на окружности. Число узлов меняется с течением времени случайно (рис. 8.4).

Текущее значение переменной numpoints хранит число узлов В периодически - фото 67

Текущее значение переменной numpoints хранит число узлов. В периодически вызываемой функции initve не используется массив вершин, а применяется единственная переменная - указатель на структуру TCustomVertex. В этой структуре, в отличие от предыдущих примеров, отсутствует поле color, а описание формата данных вершины сократилось до одной константы:

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

Интервал:

Закладка:

Сделать

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

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


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

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

x