Оглавление
- Благодарности
- Введение
- Предпосылки
- Необходимые средства разработки
- Рекомендуемое оборудование
- Для кого предназначена эта книга
- Установка DirectX 9.0
- Настройка среды разработки
- Использование библиотеки D3DX
- Использование документации и примеров из DirectX SDK
- Соглашения об оформлении кода
- Обработка ошибок
- Ясность
- Примеры программ и дополнительная поддержка
- Часть I. Математическая подготовка
- Векторы в трехмерном пространстве
- Равенство векторов
- Вычисление модуля вектора
- Нормализация вектора
- Сложение векторов
- Вычитание векторов
- Умножение вектора на скаляр
- Скалярное произведение векторов
- Векторное произведение
- Матрицы
- Равенство, умножение матрицы на скаляр и сложение матриц
- Умножение матриц
- Единичная матрица
- Инвертирование матриц
- Транспонирование матриц
- Матрицы в библиотеке D3DX
- Основные преобразования
- Матрица перемещения
- Матрицы вращения
- Матрица масштабирования
- Комбинирование преобразований
- Некоторые функции для преобразования векторов
- Плоскости
- D3DXPLANE
- Взаимное расположение точки и плоскости
- Создание плоскостей
- Нормализация плоскости
- Преобразование плоскости
- Точка плоскости, ближайшая к заданной
- Лучи
- Лучи
- Пересечение луча и плоскости
- Итоги
- Часть II. Основы Direct3D
- Глава 1. Инициализация Direct3D
- 1.1. Обзор Direct3D
- 1.1.1. Устройство REF
- 1.1.2. D3DDEVTYPE
- 1.2. COM
- 1.3. Предварительная подготовка
- 1.3.1. Поверхности
- 1.3.2. Множественная выборка
- 1.3.3. Формат пикселей
- 1.3.4. Пул памяти
- 1.3.5. Цепочка обмена и переключение страниц
- 1.3.6. Буфер глубины
- 1.3.7. Обработка вершин
- 1.3.8. Возможности устройств
- 1.4. Инициализация Direct3D
- 1.4.1. Запрос интерфейса IDirect3D9
- 1.4.2. Проверка поддержки аппаратной обработки вершин
- 1.4.3. Заполнение структуры D3DPRESENT_PARAMETERS
- 1.4.4. Создание интерфейса IDirect3DDevice9
- 1.5. Пример приложения: инициализация Direct3D
- 1.5.1. Файлы d3dUtility.h/cpp
- 1.5.2. Каркас примера
- 1.5.3. Приложение D3D Init
- 1.6. Итоги
- Глава 2. Конвейер визуализации
- 2.1. Представление моделей
- 2.1.1. Форматы вершин
- 2.1.2. Треугольники
- 2.1.3. Индексы
- 2.2. Виртуальная камера
- 2.3. Конвейер визуализации
- 2.3.1. Локальное пространство
- 2.3.2. Мировое пространство
- 2.3.3. Пространство вида
- 2.3.4. Удаление невидимых поверхностей
- 2.3.5. Освещение
- 2.3.6. Отсечение
- 2.3.7. Проекция
- 2.3.8. Преобразование порта просмотра
- 2.3.9. Растеризация
- 2.4. Итоги
- Глава 3. Рисование в Direct3D
- 3.1. Буферы вершин и индексов
- 3.1.1. Создание буферов вершин и индексов
- 3.1.2. Доступ к памяти буфера
- 3.1.3. Получение информации о буфере
- 3.2. Режимы визуализации
- 3.3. Подготовка к рисованию
- 3.4. Рисование с буферами вершин и индексов
- 3.4.1. IDirect3DDevice9::DrawPrimitive
- 3.4.2. IDirect3DDevice9::DrawIndexedPrimitive
- 3.4.3. Начало и завершение сцены
- 3.5. Геометрические объекты D3DX
- 3.6. Примеры приложений: треугольники, кубы, чайники, D3DXCreate*
- 3.7. Итоги
- Глава 4. Цвет
- 4.1. Представление цвета
- 4.2. Цвета вершин
- 4.3. Затенение
- 4.4. Пример приложения: цветные треугольники
- 4.5. Итоги
- Глава 5. Освещение
- 5.1. Компоненты света
- 5.2. Материалы
- 5.3. Нормали вершин
- 5.4. Источники света
- 5.5. Пример приложения: освещенная пирамида
- 5.6. Дополнительные примеры
- 5.7. Итоги
- Глава 6. Текстурирование
- 6.1. Координаты текстур
- 6.2. Создание текстур и разрешение текстурирования
- 6.3. Фильтры
- 6.4. Детализируемые текстуры
- 6.4.1. Фильтр детализации текстур
- 6.4.2. Использование детализируемых текстур в Direct3D
- 6.5. Режимы адресации
- 6.6. Пример приложения: текстурированный квадрат
- 6.7. Итоги
- Глава 7. Смешивание
- 7.1. Формулы смешивания
- 7.2. Коэффициеты смешивания
- 7.3. Прозрачность
- 7.3.1. Альфа-канал
- 7.3.2. Указание источника альфа-компоненты
- 7.4. Создание альфа-канала с помощью утилиты DirectX Texture Tool
- 7.5. Пример приложения: прозрачный чайник
- 7.6. Итоги
- Глава 8. Трафареты
- 8.1. Использование буфера трафарета
- 8.1.1. Создание буфера трафарета
- 8.1.2. Проверка трафарета
- 8.1.3. Управление проверкой трафарета
- 8.1.3.1. Эталонное значение трафарета
- 8.1.3.2. Маска трафарета
- 8.1.3.3. Значение трафарета
- 8.1.3.4. Операция сравнения
- 8.1.4. Обновление буфера трафарета
- 8.1.5. Маска записи трафарета
- 8.2. Пример приложения: зеркала
- 8.2.1. Математика отражений
- 8.2.2. Обзор реализации отражений
- 8.2.3. Код и комментарии
- 8.2.3.1. Часть I
- 8.2.3.2. Часть II
- 8.2.3.3. Часть III
- 8.2.3.4. Часть IV
- 8.2.3.5. Часть V
- 8.3. Пример приложения: плоская тень
- 8.3.1. Тени от параллельного источника света
- 8.3.2. Тени от точечного источника света
- 8.3.3. Матрица тени
- 8.3.4. Использование буфера трафарета для предотвращения двойного смешивания
- 8.3.5. Код и комментарии
- 8.4. Итоги
- Часть III. Применение Direct3D
- Глава 9. Шрифты
- 9.1. ID3DXFont
- 9.1.1. Создание ID3DXFont
- 9.1.2. Рисование текста
- 9.1.3. Вычисление частоты кадров
- 9.2. CD3DFont
- 9.2.1. Создание экземпляра CD3DFont
- 9.2.2. Рисование текста
- 9.2.3. Очистка
- 9.3. D3DXCreateText
- 9.4. Итоги
- Глава 10. Сетки: часть I
- 10.1. Геометрия сетки
- 10.2. Подгруппы и буфер атрибутов
- 10.3. Рисование
- 10.4. Оптимизация
- 10.5. Таблица атрибутов
- 10.6. Данные о смежности
- 10.7. Клонирование
- 10.8. Создание сетки (D3DXCreateMeshFVF)
- 10.9. Пример приложения: создание и визуализация сетки
- 10.10. Итоги
- Глава 11. Сетки: часть II
- 11.1. ID3DXBuffer
- 11.2. X-файлы
- 11.2.1. Загрузка X-файлов
- 11.2.2. Материалы в X-файле
- 11.2.3. Пример приложения: загрузка X-файла
- 11.2.4. Генерация нормалей вершин
- 11.3. Прогрессивные сетки
- 11.3.1. Создание прогессивной сетки
- 11.3.2. Веса атрибутов вершин
- 11.3.3. Методы ID3DXPMesh
- 11.3.4. Пример приложения: прогрессивная сетка
- 11.4. Ограничивающие объемы
- 11.4.1. Новые константы
- 11.4.2. Типы ограничивающих объемов
- 11.4.3. Пример приложения: ограничивающие объемы
- 11.5. Итоги
- Глава 12. Построение гибкого класса камеры
- 12.1. Проектирование класса камеры
- 12.2. Детали реализации
- 12.2.1. Вычисление матрицы вида
- 12.2.1.1. Часть 1: Перемещение
- 12.2.1.2. Часть 2: Вращение
- 12.2.1.3. Комбинирование обеих частей
- 12.2.2. Вращение относительно произвольной оси
- 12.2.3. Наклон, рыскание и вращение
- 12.2.4. Ходьба, сдвиг и полет
- 12.3. Пример приложения: камера
- 12.4. Итоги
- Глава 13. Основы визуализации ландшафтов
- 13.1. Карты высот
- 13.1.1. Создание карты высот
- 13.1.2. Загрузка файла RAW
- 13.1.2. Досуп к карте высот и ее модификация
- 13.2. Создание геометрии ландшафта
- 13.2.1. Вычисление вершин
- 13.2.2. Вычисление индексов — определение треугольников
- 13.3. Текстурирование
- 13.3.1. Процедурный подход
- 13.4. Освещение
- 13.4.1. Обзор
- 13.4.2. Вычисление затенения квадрата
- 13.4.3. Затенение ландшафта
- 13.5. «Ходьба» по ландшафту
- 13.6. Пример приложения: ландшафт
- 13.7. Возможные усовершенствования
- 13.8. Итоги
- Глава 14. Системы частиц
- 14.1. Частицы и точечные спрайты
- 14.1.1. Формат структуры
- 14.1.2. Режимы визуализации точечных спрайтов
- 14.1.3. Частицы и их атрибуты
- 14.2. Компоненты системы частиц
- 14.2.1. Рисование системы частиц
- 14.2.2. Хаотичность
- 14.3. Примеры систем частиц: снег, фейерверк, след снаряда
- 14.3.1. Пример приложения: снег
- 14.3.2. Пример приложения: фейерверк
- 14.3.3. Пример приложения: след снаряда
- 14.4. Итоги
- Глава 15. Выбор объектов
- 15.1. Преобразование из экранного пространства в окно проекции
- 15.2. Вычисление луча выбора
- 15.3. Преобразование лучей
- 15.4. Пересечение луча и объекта
- 15.5. Пример приложения: выбор объекта
- 15.6. Итоги
- Часть IV. Шейдеры и эффекты
- Глава 16. Введение в высокоуровневый язык шейдеров
- 16.1. Пишем шейдер на HLSL
- 16.1.1. Глобальные переменные
- 16.1.2. Входная и выходная структуры
- 16.1.3. Точка входа
- 16.2. Компиляция шейдеров на HLSL
- 16.2.1. Глобальные переменные
- 16.2.1.1. Получение дескриптора константы
- 16.2.1.2. Установка констант
- 16.2.1.3. Установка значений по умолчанию для констант
- 16.2.2. Компиляция HLSL-шейдера
- 16.3. Типы переменных
- 16.3.1. Скалярные типы
- 16.3.2. Векторные типы
- 16.3.3. Матричные типы
- 16.3.4. Массивы
- 16.3.5. Структуры
- 16.3.6. Ключевое слово typedef
- 16.3.7. Префиксы переменных
- 16.4. Ключевые слова, инструкции и приведение типов
- 16.4.1. Ключевые слова
- 16.4.2. Поток выполнения программы
- 16.4.3. Приведение типов
- 16.5. Операторы
- 16.6. Определяемые пользователем функции
- 16.7. Встроенные функции
- 16.8. Итоги
- Глава 17. Знакомство с вершинными шейдерами
- 17.1. Объявление вершин
- 17.1.1. Описание объявления вершин
- 17.1.2. Создание объявления вершин
- 17.1.3. Разрешение использования объявлений вершин
- 17.2. Использование данных вершин
- 17.3. Этапы работы с вершинным шейдером
- 17.3.1. Написание и компиляция вершинного шейдера
- 17.3.2. Создание вершинного шейдера
- 17.3.3. Установка вершинного шейдера
- 17.3.4. Уничтожение вершинного шейдера
- 17.4. Пример приложения: рассеянный свет
- 17.5. Пример приложения: мультипликационная визуализация
- 17.5.1. Мультипликационное затенение
- 17.5.2. Код вершинного шейдера для мультипликационного затенения
- 17.5.3. Обводка силуэта
- 17.5.3.1. Представление краев
- 17.5.3.2. Проверка для краев силуэта
- 17.5.3.3. Генерация краев
- 17.5.4. Код вершинного шейдера обводки силуэта
- 17.6. Итоги
- Глава 18. Знакомство с вершинными шейдерами
- 18.1. Основы мультитекстурирования
- 18.1.1. Разрешение работы с несколькими текстурами
- 18.1.2. Координаты для нескольких текстур
- 18.2. Входные и выходные данные пиксельного шейдера
- 18.3. Этапы работы с пиксельным шейдером
- 18.3.1. Написание и пиксельного вершинного шейдера
- 18.3.2. Создание пиксельного шейдера
- 18.3.3. Установка пиксельного шейдера
- 18.3.4. Уничтожение пиксельного шейдера
- 18.4. Объекты выборки в HLSL
- 18.5. Пример приложения: мультитекстурирование в пиксельном шейдере
- 18.6. Итоги
- Глава 19. Каркас эффектов
- 19.1. Техники и проходы
- 19.2. Встроенные объекты HLSL
- 19.2.1. Объекты текстуры
- 19.2.2. Объекты выборки и режимы выборки
- 19.2.3. Объекты вершинных и пиксельных шейдеров
- 19.2.4. Строки
- 19.2.5. Аннотации
- 19.3. Состояния устройства в файле эффекта
- 19.4. Создание эффекта
- 19.5. Установка констант
- 19.6. Использование эффекта
- 19.6.1. Получение дескриптора эффекта
- 19.6.2. Активация эффекта
- 19.6.3. Начало эффекта
- 19.6.4. Установка текущего прохода визуализации
- 19.6.5. Завершение эффекта
- 19.6.6. Пример
- 19.7. Пример приложения: освещение и текстурирование в файле эффектов
- 19.8. Пример приложения: туман
- 19.9. Пример приложения: мультипликационный эффект
- 19.10. EffectEdit
- 19.11. Итоги
- Приложение. Введение в программирование для Windows
- Обзор
- Ресурсы
- События, сообщения, очередь сообщений и цикл обработки сообщений
- GUI
- Windows-приложение Hello World
- Исследование программы Hello World
- Включение файлов, глобальные переменные и прототипы
- WinMain
- WNDCLASS и регистрация
- Создание и отображение окна
- Цикл сообщений
- Оконная процедура
- Функция MessageBox
- Улучшенный цикл сообщений
- Итоги
- Список литературы
- Алфавитный указатель