- •Урок 1. Простейшее приложение DirectX11
- •Инициализация DirectX:InitDevice
- •Отображение сцены:Render
- •Цикл обработки сообщений
- •Очистка объектов:CleanupDevice
- •Цикл обработки сообщений
- •Обзор приложения
- •Дополнение к уроку. Настройка среды разработки
- •Заключение
- •Урок 2. Вывод 3d геометрии на экран в DirectX11
- •Обзор архитектуры для вывода геометрии в DirectX11
- •Инициализация геометрии: InitGeometry
- •Инициализация геометрии – создание вершин: InitGeometry
- •Создание буфера глубины: zBuffer
- •Отображение геометрии: Render
- •Обзор приложения
- •Обзор шейдера для нашего приложения
- •Заключение
- •Урок 3. Математические основы Direct3d
- •Знакомство с базовыми 3d представлениями данных
- •Норма вектора
- •Нормализованный вектор
- •Символические обозначения векторов
- •Преобразования матриц и операции с ними
- •Математические операции с матрицами
- •Единичная матрица
- •Модуль матрицы
- •Нормализованная матрица
- •Матрицы трансформаций
- •Матрицы, используемые в DirectX
- •Заключение
- •Урок 4. Установка матриц трансформаций и камеры в DirectX11
- •Урок 5. Процедурная генерация моделей для DirectX11
- •Процедурная генерация
- •Определение формата исходных данных
- •Обзор приложения
- •Заключение
- •Урок 6. Установка источников освещения DirectX11
- •Урок 7. Текстуры в Direct3d11
- •Урок 8. Загрузка мешей в DirectX11
- •Урок 9. Шейдеры в Direct3d11
- •Урок 10. Различные шейдеры DirectX11
- •Шейдеры
- •Шейдер для эффекта bump
- •Шейдер для эффекта металлической поверхности
- •Использование нескольких шейдеров в приложении
- •Обзор приложения
- •Заключение
Цикл обработки сообщений
Перед нашей главной и глобальной функцией WinMain должна быть еще одна функция, MsgProc. Это так называемся CallBack функция, и Windows вызывает её даже самостоятельно, когда ей это потребуется. Что же касается наполнения функции MsgProc то в неё приходят различные сообщения Windows, и нужно на это как то реагировать. В дальнейшем внутрь неё вы конечно же вставите обработку клавиш «вперед, назад, влево вправо» а также обязательно «пробел» или «ctrl» для того, чтобы эффективно и быстро нажав на них уничтожать ваших ненавистных 3d– монстров из плазмомета.
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { PAINTSTRUCT ps; HDC hdc;
switch( message ) { case WM_PAINT: hdc = BeginPaint( hWnd, &ps ); EndPaint( hWnd, &ps ); break;
case WM_DESTROY: PostQuitMessage( 0 ); break;
default: return DefWindowProc( hWnd, message, wParam, lParam ); }
return 0; } |
Кстати, как бонус, можно рассказать собственно как обрабатывать указанные выше клавиши, для этого нужно немного изменить пример. Скачать измененный пример можно тут.
На этом наше первое приложение завершено, с чем мы можем поздравить себя а также будущих пользователей наших Direct3D программ.
Обзор приложения
Теперь остается только скомпилировать и запустить приложение. Исходный код приложения вы можете скачать тут. Не забываем, что в системе должен быть установлен DirectX версии не ниже 11. В текущих версиях Windows, например Windows 7, а также Windows 8 всё уже установлено, так что заботиться об установке DirectX не надо, и наше приложение успешно запуститься на них и будет прекрасно функционировать.
Данное приложение всего-лишь отображает поверхность, заполненную зеленым цветом. Однако, если это произошло, то это значит что все ок, и это не мало, так как мы создали окно, инициализировали DirectX, очистили поверхность окна синим цветом, вообщем, сделали достаточно для того, чтобы приступать к отображению чего-то трехмерного, чем и займемся в дальнейших уроках.
Дополнение к уроку. Настройка среды разработки
Помните, что для того чтобы работать с DirectX11 для начала нужно установить MicrosoftDirectXSDK. Для того, чтобы работать с файлами .cpp в MicrosoftVisualC++ нужно либо открыть существующий проект, либо создать новый. Если вы решите создать новый проект DirectX11 на основе существующих файлов C++, то необходимо воспользоваться следующей процедурой.
Открыть MicrosoftVisualC++ 2010
Выбрать пункт меню «Файл->Создать->Проект из существующего кода»
Далее нужно выбрать папку проекта, в этой папке уже должны быть будут .cpp файлы, назначить имя проекта, например, MyProject1и далее нажать копку «Создать».
VisualC++ создаст проект, при этом в обозревателе решений будет ваш проект MyProject1. В нем будут следующие папки:
Header Files
Resource Files
Source Files
Внешние зависимости
Прежде всего, убедитесь что в папке «SourceFiles» расположен ваш код .cpp. После этого нужно настроить собственно проект. Для этого нужно нажать в обозревателе решений на MyProject1, то есть перейти на проект, и затем выбрать в меню «Проект->Свойства».
После этого нужно нажать на «Свойства конфигурации».
Обратите внимание, что существует несколько конфигураций: Debug, Release и Все конфигурации. Перед любым дальнейшим изменением выберите в выпадающем списке конфигурации «все конфигурации». Это нужно сделать обязательно, иначе опции, которые вы будете устанавливать применятся не ко всему, а к чему-то отдельному, что будет мешать. Итак, настроим наш проект.
Во вкладке «Общее» выберите «Набор символов->Использовать набор символов Юникода»
Во вкладке «Каталоги VC++» выберите «Каталоги включения», далее добавьте следующий элемент (нужно впечатать текст, который идет далее): $(DXSDK_DIR)Include
Во вкладке «Каталоги VC++» выберите «Каталоги библиотек», далее добавьте следующий элемент (нужно впечатать текст, который идет далее): $(DXSDK_DIR)Lib\x86
Во вкладке «Компоновщик» выберите пункт «Ввод», затем добавьте следующий список:
d3d11.lib d3dcompiler.lib d3dx11d.lib d3dx9d.lib dxerr.lib dxguid.lib winmm.lib comctl32.lib |
Итак, на этом конфигурация MiscrosoftVisualC++ завершена и можно редактировать код C++ вашего проекта. Чтобы вы поняли, для чего нужны были настройки, описанные выше, можно пару слов сказать о них. Самое главное, что мы сделали это прописали пути к файлам Include а также пути к библиотекам Lib. Однако все те библиотеки, которые есть в Lib, либо часть из них, еще нужно подключить к проекту. Для этого и нужно было прописывать список файлов с расширением lib – тем самым, мы подключили библиотеки .Lib к проекту.
