DirectX и C++. Искусство программирования

Аннотация

Рассмотрено программирование графических эффектов на языке С++ с использованием популярной библиотеки DirectX. На занимательных практических примерах показано, как создавать различные визуальные эффекты (реалистичный огонь, электрические разряды, зеркала и др.), используемые при разработке демонстрационных роликов (Demoscene). Пошагово описано применение основных методов и интерфейсов DirectX. Показано, как написать оптимальный и эффективный программный код. Большое внимание уделено технологии использования вершинных и пиксельных шейдеров для создания реалистичных изображений. Компактдиск, прилагаемый к книге, содержит листинги примеров из книги и дополнительную информацию по DirectX.

Купить книгу онлайн

Скачать исходные коды

Введение

Данная книга посвящена разработке демо роликов с использованием C++ и DirectX. Чтобы понять, что именно мы будем рассматривать и чему учиться, нужно понимать, что такое демо ролик (Demo) и демо сцена (Demo Scene). Демо ролик – это небольшая программа или вставка кода в программе, которая показывает графические эффекты с возможным звуковым сопровождением. Демо сцена – это целая культура создания роликов, которая определяет определенные правила и законы. Существуют даже целые демо вечеринки (Demo Party) и конкурсы, где любая команда может представить на суд зрителей свой ролик. Да, именно команда. В настоящее время уже очень сложно создать действительно впечатляющий ролик в одиночку. Для этого нужно как минимум три профессионала в своей области: программист, художник и музыкант.

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

Итак, данная книга посвящена созданию графической части демо роликов, созданию эффектов и формированию видеоряда, т.е. мы будем рассматривать только программирование. Рисование текстур и создание музыки выходит за рамки книги даже потому, что я просто не умею рисовать и не смогу вас этому научить :). Но не смотря на это, мы будем использовать уже созданные текстуры и звук, дабы научиться синхронизировать все это в пространстве экрана и во времени проигрывания демо ролика.

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

Дабы наши демо ролики не выглядели слишком убогими и устаревшими, в качестве основы я выбрал достаточно мощный DirectX 9. Это значит, что не каждый компьютер сможет воспроизвести такие ролики и вам понадобиться графический ускоритель ATI 9ХХХ серии или GeForce FX и выше. Я думаю, что к моменту выхода этой книги, такие ускорители и даже мощнее будут стоять на большинстве компьютеров и для вас это не будет большой проблемой.

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

Так как основная цель демо ролик показать возможности программиста и компьютера, то немалую часть книги мы будем уделять оптимизации. Некоторые участки кода будут упрощены, дабы код был читаемым, но все же, оптимизации будет уделено достаточно большое внимание. Только благодаря ей вы сможете создать что-то впечатляющее. Если на экране будет отображаться простая движущаяся сфера, которая будет тормозить, то это никого не впечатлит. Но если сцена будет сложной и при этом, она будет отображаться с частотой в 60 кадров в секунду, то это уже искусство.

Я всегда говорю, что если вы создадите программу, то вы программист, но если вы создаете ее лучше других, то вы хакер. Мы будем учиться искусству хакеров, т.е. создавать демо ролики лучше других.

Для понимания книги вам достаточно только знания языка программирования С++. Технологию Direct мы будем рассматривать с самых основ, но правда только то, что будет необходимо для материала книги. Рассмотреть абсолютно все возможности просто невозможно, уж слишком много накопилось у DirectX возможностей. Если вы хотите познакомиться с DirectX более глубоко, то без специализированной книги, MSDN (Microsoft Development Network) и файлов помощи вам не обойтись.

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

Комментарий к новому интерфейсу Microsoft

Совсем недавно MS убрала из интерфейса ID3DXEffect метод Pass, который обязательно используется при отображении графики с помощью шейдеров, что и применялось М. Фленовым в книгах: DirectX и C++. Искусство программирования, DirectX и Delphi. Искусство программирования, Искусство программирования игр на С++ . Теперь нужно использовать не метод Pass, а пару методов BeginPass и EndPass.

Если раньше код отображения выглядел так:

pEffect[ef_index]->Begin(&uPass, NULL);
for(UINT i = 0; i < uPass; i++)
{
pEffect[ef_index]->Pass(i);
// Здесь выводим шейдер
}
pEffect[ef_index]->End();

То теперь:

pEffect[ef_index]->Begin(&uPass, NULL);
for(UINT i = 0; i < uPass; i++)
{
pEffect[ef_index]->BeginPass(i);
//Здесь выводим шейдер
pEffect[ef_index]->EndPass();
}
pEffect[ef_index]->End();

Содержимое

Оглавление Предисловие 7
О чем эта книга 7
Благодарности 9

Глава 1. Введение в Demo и DirectX

11
1.1. История демо-сцены 11
1.2. Введение в DirectX 17
1.3. Установка и настройка DirectX 19
1.4. Введение в оптимизацию 22
ЗАКОН № 1 23
ЗАКОН № 2 24
ЗАКОН № 3 25
ЗАКОН № 4 26
ЗАКОН № 5 26
ЗАКОН № 6 28
ЗАКОН № 7 28
ЗАКОН № 8 29
ЗАКОН № 9 29
1.5. Инициализация Direct3D 31
1.6. Инициализация DirectDraw 47
1.7. Освобождение ресурсов 56

Глава 2. Основные функции DirectX

57
2.1. Загрузка картинки в DirectDraw 57
2.2. Отображение картинок в DirectDraw 61
2.2.1. Метод Blt 62
2.2.2. Метод BltFast 62
2.2.3. Переключение поверхностей 63
2.2.4. Примеры копирования поверхностей 64
2.2.5. Использование метода Blt для очистки поверхности 65
2.2.6. Прозрачное копирование 67
2.3. Оконные приложения 70
2.4. Контроль области отображения 73
2.5. Прямой доступ к видеопамяти 75
2.6. Формат пиксела 81
2.7. Потеря поверхностей 86
2.8. Определение поддерживаемых режимов 90
2.9. Отображение в Direct3D 97
2.10. Примитивы Direct3D 100
2.10.1. Описание фигуры 102
2.10.2. Буфер вершин 104
2.10.3. Работа с буфером вершин 105
2.10.4. Буфер индексов вершин 106
2.10.5. Точка просмотра 109
2.10.6. Отображение 112
2.10.7. Вывод буфера вершин 112
2.11. Mesh 117
2.11.1. Загрузка X-файла 118
2.11.2. Материалы и текстуры 121
2.11.3. Точка осмотра сцены 122
2.11.4. Освещение 123
2.11.5. Отображение сетки 124
2.12. Синхронизация 126
2.12.1. Синхронизация задержками 126
2.12.2. Синхронизация временем 127
2.12.3. Пример синхронизации временем 2D-графики 129
2.12.4. Пример синхронизации временем 3D-графики 132

Глава 3. Оптимизация в DirectX

137
3.1. Оптимизация графики 137
3.2. Быстрая закраска поверхности 141
3.3. Рисование линий 144
3.4. Быстрая загрузка картинок 152
3.5. Ручной контроль области вывода 157
3.6. Оптимизация прямого доступа 165
3.7. Оптимизация 3D-графики 167
3.8. Функции оптимизации 3D 171

Глава 4. 2D-эффекты

173
4.1. Обман зрения 174
4.1.1. Градиент 174
4.1.2. Мультипликация 175
4.2. Линейные эффекты 175
4.2.1. Сетка 176
4.2.2. Спираль квадратов 177
4.2.3. Прямоугольный туннель 180
4.3. Нелинейная графика 184
4.3.1. Фейерверк 184
4.3.2. Кислота 187
4.4. Эффекты с изображениями 189
4.4.1. Прозрачность 192
4.4.2. Линза 194
Квадратная линза 195
Круглая линза 196
Выпуклая линза 198
4.5. Фракталы 201

Глава 5. 3D-эффекты

203
5.1. Альфа-смешивание 203
5.2. Управление прозрачностью 210
5.3. Экранные координаты 211
5.4. Эффекты размытия 214
5.5. Взрыв на макаронной фабрике 219
5.6. Текстуры 224
5.6.1. Простой пример работы с текстурами 224
5.6.2. Взрыв на текстильной фабрике 229
5.6.3. Прозрачность текстур 233
5.6.4. Анимация прозрачности 241
5.6.5. Анимация текстуры 243
5.7. Добро пожаловать в истинное 3D-измерение 247
5.8. Материалы и освещение 250
5.8.1. Big sound 251
5.8.2. Свечка 254
5.9. Свечение 259
5.9.1. Инициализация 260
5.9.2. Отображение 266
5.9.3. Настройки текстуры 268
5.9.4. Завершающая стадия 270
5.9.5. Точечные текстуры 271
5.10. Отображение на текстуре 274
5.10.1. Подготовка 275
5.10.2. Инициализация 276
5.10.3. Отображение текстуры с анимацией 280
5.11. Не все золото, что блестит 285
5.12. Эффекты 293
5.13. Обман зрения 296
5.14. Зеркало 304
5.15. Продвинутое зеркало 311
5.16. Введение в вершинный шейдер 313
5.17. Простейший пример шейдеров 316
5.17.1. Пишем шейдер 317
5.17.2. Использование вершинного шейдера 321
5.18. Управление освещением в шейдере 328
5.18.1. Нормали 328
5.18.2. Шейдер 330
5.19. Невесомая капля 332
5.20. Пиксельный шейдер 337
5.21. Блики 345
5.22. Сердечный приступ 348
5.23. Огненный дракон 352
5.23.1. Костер 352
5.23.2. Ядро 357
5.23.3. Огненная лава 358
5.24. Морфинг 359
5.25. Молния 362
5.26. Кубические текстуры в шейдере 363
5.27. Каждому объекту свой шейдер 367
Заключение 375
Приложение. Описание компакт-диска 377
Список литературы 379
Предметный указатель 381
6 Оглавление 5 Оглавление

Отзывы

Добавить Комментарий

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповидания на русском или английском языке.

Пишите мне


Я в социальных сетях
Facebook Telegram Програмысли
Youtube Instagram Твитер