Программирование графики с использованием Direct3D

         

Программирование графики с использованием Direct3D

Надвигающаяся трехмерная революция
Что такое Direct3D?
Требования к читателю
Требования к программному обеспечению
Требования к аппаратному обеспечению
Получение помощи

Краткий обзор Visual C++

Краткий обзор Visual C++
Студия Разработчика
Windows SDK против MFC
Программирование, управляемое событиями
Функция WinMain
Обработчики событий

Карты сообщений
Мастер создания классов ClassWizard
Мастер создания приложений AppWizard
Создание MFC приложения
Добавление обработчика событий
Мастер создания приложений Direct3D AppWizard
Программирование для Windows и некоторые соглашения

Введение в трехмерную графику

Введение в трехмерную графику
Трехмерные системы координат
Начало системы координат
Векторы
Плоскости
Вершины
Грани
Сетки
Нормали
Преобразования

Перемещение
Масштабирование
Вращение
Наложение текстур
Природа текстуры
Масштабирование текстуры
Способы наложения текстуры
Анимация текстуры
Освещение
Цвет источника света

Типы источников света
Рассеянный свет
Точечное освещение
Источник направленного света
Источник зонального света
Перспективное преобразование
От трех измерений к двум
Техника удаления невидимых поверхностей
Z-буферизация
Z-буферизация: За и Против

Методы визуализации
Каркасный метод
Неосвещенный метод
Равномерная закраска
Метод Гуро
Метод Фонга
Трассировка лучей
Анимация
Параметры движения
Ключевые кадры

Заключение

Знакомство с Direct3D

Знакомство с Direct3D
Direct3D

COM
Direct3DRM: основной интерфейс
Создание объектов Direct3D
Изменение пути поиска файлов
Управление скоростью обновления
Direct3DRMDevice: интерфейс устройства
Цветовые модели
Параметры визуализации
Direct3DWinDevice: интерфейс устройства Windows
Direct3DRMViewport: интерфейс порта просмотра

Поле зрения
Отсечение
Direct3DRMFrame: интерфейс фрейма
Иерархия фреймов
Позиционирование фреймов
Перемещение фреймов
Перемещение и функции обратного вызова
Direct3DRMMeshBuilder: интерфейс конструктора сеток
Загрузка и сохранение
Параметры визуализации

Доступ к граням
Доступ к вершинам
Перемещение и масштабирование
Производительность
Direct3DRMMesh: интерфейс сетки
Группы граней в сетке
Доступ к вершинам
Создание сеток посредством конструктора сеток
Direct3DRMFace: интерфейс грани
Текстуры граней

Материалы грани
Вершины грани
Direct3DRMTexture: интерфейс текстуры
Создание текстур
Цвета текстуры
Декалы
Direct3DRMTextureWrap: интерфейс наложения текстур
Direct3DRMMaterial: интерфейс материала
Мощность отраженного света
Цвет отраженного света

Цвет испускаемого света
Direct3DRMLight: интерфейс источника света
Рассеяный свет
Точечный источник света
Направленный свет
Параллельный свет
Зональное освещение
Direct3DRMShadow: интерфейс тени
Direct3DRMAnimation: интерфейс анимации
Создание ключей

Установка времени в анимации
Параметры анимации
Direct3DRMAnimationSet: интерфейс анимационного набора
Загрузка анимационных наборов
Установка времени в анимационных наборах
Типы данных Direct3D
D3DVALUE
D3DVECTOR
D3DCOLOR
D3DRMBOX

D3DRMVERTEX
D3DRMQUATERNION
HRESULT
X-файлы
Conv3ds
Заключение

Код

Код
Мастер Direct3D AppWizard
Программа Sample
Зависимости COM-интерфейсов Direct3D
Дерево зависимостей
Создание собственного дерева зависимостей
Последовательность событий

Разработка классов
Разделение труда
Инициализация Direct3D
Функция InitInstance()
Функция OnCreate()
Функция CreateDevice()
Функция GetGUID()
Конструирование сцен
Функция CreateScene()
Создание сетки

Создание источника света
Создание порта просмотра
Управление сценой
Функция OnIdle()
Функция OnActivate()
Функция OnPaint()
Функция OnSize()
Функция OnEraseBkgnd()
Использование функций обратного вызова
Завершение работы

Функция OnDestroy()
Вспомогательные функции
Функция ScaleMesh()
Функция GetMouse()
Преобразования типов COLORREF и D3DCOLOR
Обучайтесь экспериментируя

Наложение текстур

Наложение текстур
Наглядный пример наложения текстур
Наложение текстуры на сетку
Демонстрационное приложение Jade
Класс JadeWin
Функция JadeWin::CreateScene()
Функция JadeWin::MoveFrame()

Функции меню Render приложения JadeWin
Методы наложения текстуры
Приложение Wraps
Класс WrapsWin
Функция WrapsWin::CreateScene()
Функция WrapsWin::LoadMeshes()
Функция WrapsWin::LoadWrapsTexture()
Функция WrapsWin::OnWrapsReset()
Функция WrapsWin::ApplyWraps()
Декалы

Приложение Decal
Класс DecalWin
Функция DecalWin::CreateScene()
Прозрачность
Приложение OrbStar
Класс OrbStarWin
Функция OrbStarWin::CreateScene()
Функции обратного вызова в приложении OrbStar
Анимация текстуры
Приложение TextureDrift

Класс TextureDriftWin
Функция TextureDriftWin::CreateScene()
Функция TextureDriftWin::MoveTexture()
Приложение ShowRoom
Класс ShowRoomWin
Функция ShowRoom::CreateScene()
Функция ShowRoom::UpdateTexture()
Заключение

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

Источники света и тени
Методы визуализации и цветовые модели
Рассеянный свет
Демонстрация рассеянного света
Класс AmbientLightWin

Функция AmbientLightWin::CreateScene()
Функции меню Render
Точечный свет
Приложение Firefly
Класс FireflyWin
Функция FireflyWin::CreateScene()
Направленный свет
Приложение SpaceStation
Класс SpaceStationWin
Функция SpaceStationWin::CreateScene()

Параллельно-точечный свет
Приложение SpaceDonut
Класс SpaceDonutWin
Функция SpaceDonutWin::CreateScene()
Прожектор
Приложение Spotlight
Класс SpotlightWin
Функция SpotlightWin::CreateScene()
Функция SpotlightWin::MoveLight()
Функции меню Render приложения Spotlight

Функции меню Beam приложения Spotlight
Работа с несколькими источниками света
Тени
Приложение Shadow
Класс ShadowWin
Функция ShadowWin::CreateScene()
Функция ShadowWin::AdjustSpin()
Функции меню Render приложения Shadow
Заключение

Фреймы и анимация

Фреймы и анимация
Иерархии фреймов
Приложение Molecule
Класс MoleculeWin

Функция MoleculeWin::CreateScene()
Функция MoleculeWin::CreateHierarchy()
Функция MoleculeWin::CreateChildren()
Функции управления глубиной иерархии
Управление количеством дочерних фреймов
Ключевые кадры
Приложение Rocket
Класс RocketWin
Функция RocketWin::CreateScene()
Функция RocketWin::UpdateScene()

Функции меню Animation в классе RocketWin
Функции управления скоростью анимации
Еще об анимации
Приложение Target
Класс TargetWin
Функция TargetWin::CreateScene()
Функция TargetWin::MoveTarget()
Функция TargetWin::OrientFrame()
Заключение

Снова о сетках

Глава 8. Снова о сетках
Анимация вершин
Приложение Cube
Класс CubeWin

Функция CubeWin::CreateScene()
Функция CubeWin::UpdateCube()
Функции меню Render в классе CubeWin
Группы граней сетки
Приложение Cube2
Класс Cube2Win
Функция Cube2Win::CreateScene()
Функция Cube2Win::UpdateCube()
Функция Cube2Win::UpdateColors()
Функции меню Render в классе Cube2Win

Трансформация
Приложение MorphPlay
Структура классов
Класс MorphWin
Функция MorphWin::LoadMorphSequence()
Функция MorphWin::LoadMeshes()
Функция MorphWin::CreateAnimations()
Функция MorphWin::PrepareMorphVertices()
Функция MorphWin::GetNumMorphTargets()
Функция MorphWin::AddMorphKey()

Функция MorphWin::SetMorphTime()
Функция MorphWin::GetMorphMesh()
Класс MorphPlayWin
Функция MorphPlayWin::CreateScene()
Функция MorphPlayWin::OnFileOpen()
Функция MorphPlayWin::InitMorphSequence()
Функция MorphPlayWin::UpdateMorph()
Функции класса MorphPlayWin для работы с мышью
Заключение

Порты просмотра

Порты просмотра
Поле зрения
Приложение Zoom
Класс ZoomWin

Функция ZoomWin::CreateScene()
Функция ZoomWin::AdjustField()
Функции меню Animation в классе ZoomWin
Выбор объектов
Приложение MeshPick
Класс MeshPickWin
Функция MeshPickWin::CreateScene()
Функции класса MeshPickWin для работы с мышью
Функция MeshPickWin::PickMesh()
Функция MeshPickWin::UpdateDrag()

Выбор граней
Приложение FacePick
Класс FacePickWin
Функция FacePickWin::CreateScene()
Функции класса FacePickWin для работы с мышью
Функция FacePickWin::PickFace()
Функция FacePickWin::UpdateDrag()
Функции меню Color в классе FacePickWin
Функции меню File в классе FacePickWin
Использование нескольких портов просмотра

Приложение MultiView
Код приложения MultiView
Класс MultiViewWin
Функция MultiViewWin::CreateScene()
Изменения в классе RMWin
Функция RMWin::CreateDevice()
Функция RMWin::ConfigViewport()
функция RMWin::CreateViewports()
Функция RMWin::Render()
Функция RMWin::OnSize()

Функции меню Viewport в классе RMWin
Заключение

Полноэкранные приложения

Полноэкранные приложения
DirectDraw
Интерфейс DirectDraw
Уровни кооперации
Видеорежимы
Переключение страниц

Поверхности
Z-буфферизация
Палитры
Модификация класса RMWin
Класс RMWin
Удаление ненужных функций
Добавление поддержки видеорежимов
Функции работы с поверхностями
Поддержка палитры
Функция OnCreate()

Функция InitDisplayMode()
Функция InitMainSurfaces()
Функции работы с палитрой
Функция CreateDevice()
Функция ActivateDisplayMode()
Функция GetNumDisplayModes()
Функция GetCurDisplayMode()
Функция GetDisplayModeDims()
Функция GetCurDisplayModeDims()
Функция CreateSurface()

Функция ClearSurface()
Функция Render()
Приложение FullScreen
Класс FullScreenWin
Функция FullScreenWin()
Функция CreateScene()
Функция CreateMenuSurface()
Функция UpdateMenuSurface()
Функция CreateFPSSurface()
Функция UpdateFPSSurface()

Функция Render()
Функция KeyDown()
Заключение