Как подключить directx sdk к visual studio 2019
Прежде чем начать компилировать исходные коды, немного настроим MS Visual C++ 2010, указав пути к подсоединяемым библиотекам (.lib) и заголовочным файлам (.h) MS DirectX SDK. Для других версий MS Visual C++ процедура ничем не отличается, кроме расположения соответствующих меню и их внешнего вида. Начиная с версии 8.0 (MS Visual Studio 2005), при создании нового Проекта IDE автоматически создаёт для него Решение.
"Решением" (от англ. solution) в принятой у Microsoft терминологии называется группа Проектов, объединённых общей темой. То есть, в одно Решение может входить несколько Проектов. В нашем случае это неважно, и в нашем Решении будет один Проект (пока один). Обрати внимание, что по умолчанию все Решения и Проекты сохраняются в каталог c:\users\<имя пользователя>\documents\visual studio 2010\Projects (при желании можно изменить).
Из-за того, что MS Visual C++ 2010 хранит все настройки Проектов в их же каталоге, данную процедуру настроки путей придётся проделывать при создании каждого нового Проекта (причём, даже в том случае, когда эти Проекты принадлежат к одному и тому же Решению!). Пути сохраняются вместе с Проектом и при повторном открытии настраивать их заново не требуется. Также не требуется настройка путей при открытии примеров из MS DirectX SDK и некоторых других Проектов/Решений, в которых уже содержатся сведения о расположении необходимых библиотек и заголовочных файлов.
Microsoft Visual C++ 2010. Окно приветствия при первом запуске- Убедись, что MS Visual C++ 2010 и DirectX SDK успешно установлены, и что MS Visual C++ 2010 запускается (по умолчанию ярлык расположен в меню Пуск).
Если нет, читай статью здесь: Устанавливаем Microsoft Visual C plus plus 2010 Express
Последнюю версию DirectX SDK нетрудно найти в поисковиках.
Пара слов о DirectX SDK
DirectX SDK:
- Бесплатный набор библиотек, заголовочных файлов и примеров для создания игр и мультимедийных приложений под DirectX. Без него никак.
- Не трудно найти в Интернете.
- Не имеет своей программной оболочки. Для просмотра содержимого открой соответствующий каталог (в нашем случае C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)) с помощью Проводника Windows.
В соответствующих каталогах расположены файлы:
Developer Runtime | Девелоперские (они же debug-, отладочные, для разработчиков) версии библиотек времени выполнения (runtime library). На всякий случай. |
Documentation | Документация по DirectX SDK. Всё на английском языке. Размещена в двух CHM-файлах (directx_sdk.chm и windows_graphics.chm). Компилированные файлы справки Windows (CHM) имеют удобную древовидную навигацию и поиск. |
Extras | Отладочные (debug) версии драйверов DirectSound. Для данного курса не потребуются. |
Include | Заголовочные файлы для импорта функций DirectX. Самый нужный каталог. Путь к нему мы чуть позднее укажем в настройках MS Visual C++. |
Lib | Библиотеки DLL, содержащие функции DirectX. Самый нужный каталог. Путь к нему мы чуть позднее укажем в настройках MS Visual C++. Внутри 2 подкаталога ("x64" и "x86"). Указываем только "x86". (Программирование под 64-битную архитектуру это тема для отдельного курса.) |
Redist | Т.н. "библиотека времени выполнения". Необходима для запуска игр, спрограммированных под MS DirectX, на ПК. Включена по-умолчанию во все версии ОС MS Windows Vista/7. Так как это самая свежая версия, смело запускаем DXSETUP.exe из данного каталога и следуем шагам несложной программы установки для обновления компонентов DirectX в вашей ОС. |
Samples | 790 мегабайт примеров! Разложены по папкам в виде проектов (или т.н. "решений" (solution)), которые открываются и компилируются в исполняемый .exe файл в (правильно сконфигурированной) среде MS Visual Studio. Настоятельно рекомендуется для самостоятельного изучения, как только мы подготовим к работе нашу IDE. Для удобного просмотра можно использовать обозреватель примеров из подкаталога SampleBrowser. Все описания и комментарии в исходных кодах на английском языке. |
System | Системные файлы для инсталляции и деинсталляции DirectX SDK, DOT NET Framework 2.0 (специальная надстройка для ОС для выполнения приложений, созданных под архитектуру .NET; здесь не потребуется) и др.. На всякий случай установим vc10redist_x86.exe из подкаталога uninstall (библиотеки времени выполнения для приложений, спрограммированных на IDE MS Visual С++ 2010). |
Utilities | Утилиты (служебные приложения). Содержит множество дополнительных приложений (подкаталог /bin - исполняемые двоичные файлы; подкаталог source - исходные коды этих приложений) для конвертирования мешей (полигональных сеток), текстур, для стандартизованного описания игрового проекта и другие. Пока не нужен. |
Создаём Проект
С недавних пор меню настройки путей к библиотекам (.lib) и заголовочным файлам (.h) переехало из Сервис->Параметры (здесь и далее значком "->" будем обозначать выпадаюшее меню или подпункт меню) в Проект->Свойства. Таким образом, ВСЕ настройки и пути к каталогам теперь хранятся в соответствующих файлах Проектов. Причём, даже если эти Проекты размещаются в пределах одного и того же Решения.
Поэтому создадим Проект.
- В верхней части окна IDE видим полосу Главного меню (Файл, Правка, Вид. ). Выбираем в нём: Файл->Создать->Проект.
- В окне "Создать проект" выбираем: "Проект Win32", в строке "Имя" пишем название проекта (в нашем случае Test01). Строки "Расположение" и "Имя Решения" заполняются автоматически (при необходимости изменяем). Жмём "OK", "Далее".
- На странице "Параметры приложения": оставляем "Приложение Windows" и отмечаем пункт "Пустой проект". Жмём "Готово".
Проект создан. Так как это "Пустой проект", он не содержит в себе никаких файлов. В левой части расположен "Обозреватель решений". Если его нет, в главном меню выбираем: Вид->Другие окна->Обозреватель решений. Или комбинация горячих клавиш Ctrl+Alt+L. В Обозревателе решений видна древовидная структура Проектов, входящих в данное Решение. Чуть ниже названия Проекта видим специально заготовленные папки (в MSVC++2010 они называются "фильтры") для файлов Проекта:
Внешние зависимости | Чаще всего здесь размещаются заголовочные файлы различных сторонних библиотек. Причём, они представлены здесь в виде ссылок. "Физически" файлы, как правило, находятся за пределами каталога Проекта и не являются его частью. Содержимое каталога "Внешние зависимости" (если внимательно посмотреть, то он тоже является своеобразным ярлыком или ссылкой) генерируется автоматически в процессе линковки и поиска так называемых внешних "зависимых" библиотек. |
Заголовочные файлы | Содержит заголовочные файлы Проекта (.h). |
Файлы исходного кода | Содержит исходные файлы Проекта (.cpp). |
Файлы ресурсов | Содержит так называемые "бинарные" ресурсы (формы, иконки, звуки и т.д.) |
В данный момент все эти каталоги пусты. Программист самостоятельно создаёт внутри них соответствующие исходные и заголовочные файлы, последовательно редактируя их в правой части окна IDE.
Сейчас это неважно. Так что вернёмся к указанию путей к MS DirectX SDK.
Настраиваем MS Visual C++ 2010 и DirectX SDK
- В Обозревателе решений видим: "Решение "Test01"", а строкой ниже жирным шрифтом название Проекта (Test01). Наводим курсор на эту строку (с названием Проекта), щелчок правой кнопкой мыши. Во всплывающем меню выбираем пункт "Свойства". Или в Главном меню выбираем Проект->Свойства. Или нажимаем Alt+F7.
- В появившемся меню свойств проекта выбираем "Каталоги VC++". В правой части этой страницы расположены пути ко всевозможным каталогам. Здесь нас интересуют только 2 строки: Каталоги включения и Каталоги библиотек.
- Щёлкаем левой кнопкой мыши по пункту Каталоги включения. В правой части этой строки видим кнопку с чёрным треугольником, указывающим на наличие выпадающего меню. Нажимаем на неё -> выбираем "Изменить. "
- В появившемся меню "Каталоги включения" жмём кнопку "Создать строку" (с жёлтой папкой) и указываем полный путь к заголовочным (include) файлам DirectX SDK. В нашем случае это C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include. Можно просто выбрать каталог из дерева каталогов, нажав кнопку с троеточием, расположенную справа от строки ввода. Жмём "ОК".
- Щёлкаем левой кнопкой мыши по пункту Каталоги библиотек. В правой части этой строки видим кнопку с чёрным треугольником, указывающим на наличие выпадающего меню. Нажимаем на неё -> выбираем "Изменить. "
- В появившемся меню "Каталоги библиотек" жмём кнопку "Создать строку" (с жёлтой папкой) и указываем полный путь к 32-разрядным версиям файлов библиотек (lib) DirectX SDK. В нашем случае это C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x86. Можно просто выбрать каталог из дерева каталогов, нажав кнопку с троеточием, расположенную справа от строки ввода. Жмём "ОК".
Описывает установку, средства и поддерживаемые библиотеки, которые составляют эффективную среду разработки Direct3D 12.
Среда разработки
заголовки и библиотеки Direct3D 12 входят в состав пакета SDK для Windows 10. Для использования Direct3D 12 не требуется отдельная загрузка или установка.
после установки программного обеспечения Windows 10 SDK и Visual Studio настройка среды программирования Direct3D 12 будет завершена. рекомендуется Visual Studio 2019, так как в нем будут включены средства отладки графики D3D12, но более ранние версии Visual Studio будут работать для разработки программ.
Чтобы использовать API Direct3D 12, включите D3d12. h и свяжите с D3d12. lib или запросите точки входа непосредственно в D3d12.dll.
Доступны следующие заголовки и библиотеки. расположение статических библиотек зависит от версии (32-bit или 64-bit) Windows 10, выполняемой на компьютере.
Имя файла заголовка или библиотеки | Описание | Расположение установки |
---|---|---|
D3d12. h | Заголовок API Direct3D 12 | % Виндовссдкдир \ включить % виндовссдкверсион% \ \ум |
D3d12. lib | Статическая библиотека API-заглушки Direct3D 12 | % Виндовссдкдир \ lib % виндовссдкверсион% \ \ум\арч |
D3d12.dll | Динамическая библиотека API Direct3D 12 | % WINDIR% \ system32 |
D3d12SDKLayers. h | Заголовок отладки Direct3D 12 | % Виндовссдкдир \ включить % виндовссдкверсион% \ \ум |
D3d12SDKLayers.dll | Динамическая библиотека отладки Direct3D 12 | % WINDIR% \ system32 |
Поддерживаемые языки
Вспомогательные структуры
Существует ряд вспомогательных структур, которые, в частности, упрощают инициализацию ряда структур D3D12. Эти структуры и некоторые служебные функции находятся в заголовке D3dx12. h. Этот заголовок является открытым исходным кодом и может быть изменен разработчиком по мере необходимости — скачайте его из вспомогательной библиотеки D3D12 и ознакомьтесь со вспомогательными структурами и функциями для D3D12.
Библиотека управления памятью
Вспомогательная библиотека управления памятью доступна для загрузки, которую можно интегрировать в приложение, чтобы более точно сопоставить поведение управления памятью D3D11. Как библиотека управления стилями D3D11, она наиболее эффективна с приложениями, которые по-прежнему используют стратегию выделения ресурсов с выделенным стилем. В частности, Библиотека должна рассматриваться в качестве пошагового воссоздания, что позволяет D3D11 выполнять управление памятью в сценариях с ограниченным объемом памяти (например, с низкими картами памяти, 4-килобайтами, параметрами Ultra и т. д.). API-интерфейсы D3D12 делают возможными приемы, позволяющие повысить эффективность использования памяти по сравнению с D3D11, хотя эти методы могут быть непростыми и длительными для реализации.
Обратите внимание, что эта библиотека является выполняемой работой и может меняться со временем. Используйте приведенные ниже ссылки для доступа к библиотеке и примерам.
Поддерживаемые средства и библиотеки
С Direct3D 12 можно использовать следующие библиотеки.
Библиотека | Назначение | Документация |
---|---|---|
Набор средств DirectX SDK для DirectX 12 | значительная коллекция вспомогательных классов для написания кода C++ 12 для приложений универсальная платформа Windows (UWP), классических приложений Win32 для Windows 10 и Xbox One эксклюзивных приложений. | Вики-сайт DirectX12TK |
DirectXTex | Используйте его для чтения и записи файлов DDS, а также для выполнения различных операций по обработке содержимого текстур, включая изменение размера, преобразование формата, MIP создание карт, блочное сжатие для ресурсов текстуры среды выполнения Direct3D, а также преобразование высоты в режим обычного преобразования карт. | Вики-сайт Директкстекс |
DirectXMesh | Используйте его для выполнения различных операций обработки геометрического содержимого, включая создание обычных и касательных кадров, вычисление соседей по смежности с вершиной и оптимизацию кэша вершины. | Вики-сайт Директксмеш |
DirectXMath | Большое количество вспомогательных классов и методов для поддержки векторов, скаляров, матриц, кватернионов и многих других математических операций. | Документация по Директксмас на сайте MSDN |
UVAtlas | Используйте его для создания и упаковки текстуры исочарт Atlas. | Вики-сайт Уватлас |
Примеры
Список рабочих примеров D3D12 и их поиск и запуск см. в разделе рабочие образцы.
Пошаговые инструкции по добавлению кода для включения определенных функций см. в разделе D3D12 Code (пошаговые руководства).
Отладочный слой
для Windows 10, чтобы создать устройство, поддерживающее уровень отладки, включите необязательный компонент "графические средства". перейдите на панель Параметры, в разделе система, приложения & компоненты, управление дополнительными компонентами, добавление компонента и поиск "графические инструменты".
Заголовок, необходимый для поддержки слоя отладки D3D12SDKLayers. h, включен по умолчанию из d3d12. h.
Когда уровень отладки перечисляет утечки памяти, он выводит список указателей на объектные интерфейсы и их понятные имена. Понятное имя по умолчанию — безымянное < > . Понятное имя можно задать с помощью метода ID3D12Object:: SetName . Как правило, следует компилировать эти вызовы из рабочей версии.
Рекомендуется использовать отладочный уровень для отладки приложений, чтобы гарантировать, что они будут очищать ошибки и предупреждения. Слой отладки помогает писать код Direct3D 12. Кроме того, производительность может увеличиться при использовании слоя отладки, поскольку можно сразу увидеть причины ошибок скрытой отрисовки или даже черные экраны в источнике. Отладочный слой предоставляет предупреждения для многих проблем. Пример:
- Забыли установить текстуру, но прочесть ее в шейдере пикселей.
- Глубина вывода, но не имеет привязки состояния шаблона глубины.
- Не удалось создать текстуру с помощью INVALIDARG.
Задайте компилятор, определяющий _ отладку D3DCOMPILE, чтобы сообщить компилятору HLSL о необходимости включения отладочной информации в большой двоичный объект шейдера.
Подробные сведения о всех интерфейсах и методах отладки см. в справочнике по отладочному слою.
Общие сведения об использовании слоя отладки см. в разделе понимание уровня отладки D3D12.
Обучающие видеоролики
-->Приветствую Вас Гость | RSS
Теперь создадим исходный файл:
- В окне Solution Explorer, кликаем правой кнопкой на папке Source Files
- Выбираем Add->New item
- В открывшемся окне выбираем C++ File и вводим имя(например main.cpp)
Новый исходный файл откроется для редактирования.
Допишем в начало кода такие строки:
Для работы с DirectX в настройках проекта нужно указать пути к файлам и подключить библиотеки.(Для разработки на директе нужен DirectX SDK).
Для этого:
int WinMain(HINSTANCE hInstance,HINSTANCE hPrevinst, LPSTR cmdline,int showcmd)
<
//Код программы
return 0;
>
Теперь нужно создать главное окно приложения, в которое будем производить визуализацию. Напишем это функцией.
Для начала - объявим глобальные переменные:
HWND mWnd; //Дескриптор окна
IDirect3DDevice9* dev; //устройство Direct3D
LRESULT WINAPI WndProc(HWND Wnd, UINT msg, WPARAM wParam, LPARAM lParam)
<
switch(msg)
<
case WM_DESTROY:
<
if(Wnd==mWnd)
ExitProcess(0);
>break;
default: return DefWindowProc(Wnd,msg,wParam,lParam);
>
>
А большего нам и не нужно Итак, теперь нужно инициализировать Direct3D устройство.
Для этого напишем такую функцию:
bool CreateDirect3DDevice(int Width, int Height)
<
IDirect3D9* dir; //этот интерфейс нужен для создания устройства
dir=Direct3DCreate9(D3D_SDK_VERSION); //создание интерфейса Direct3D9.
D3DPRESENT_PARAMETERS param; //параметры устройства
ZeroMemory(¶m,sizeof(param)); //очищяем
param.AutoDepthStencilFormat=D3DFMT_D16; //формат буфера глюбины - 16 бит
param.EnableAutoDepthStencil=true;//включение буфера глубины/стенсильного буфера
param.Windowed=true;//оконный режим
param.SwapEffect=D3DSWAPEFFECT_DISCARD;//не помню, но так надо
param.BackBufferFormat=D3DFMT_UNKNOWN;//формат back-буффера
if(!CreateRenderWindow(800,600)) return false;
return !FAILED(dir->CreateDevice(0,D3DDEVTYPE_HAL,mWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,¶m,&dev)); //создание устройства с заданными параметрами
>
Если не понятны назначения и параметры функций - кури справку. Теперь программируем в основном коде программы.
В начале вызываем Функцию создания окна и устройства:
if(!CreateDirect3DDevice(800,600)) return -1;
Теперь создадим чё-нить, что будем отображать. В DirectX есть такая полезная вещь, как Mesh. Она позволяет удобно рисовать объекты
Также можно создавать примитивы. Создадим чайник. Для этого есть функция D3DXCreateTeapot()
ID3DXMesh *te;
D3DXCreateTeapot(dev,&te,0);//создаём чайник
Дальше устанавливаем стандартные настройки(материал, проэкция и свет)
D3DMATRIX pr;
D3DXMatrixPerspectiveFovLH((D3DXMATRIX*)&pr,3.1415/4,800.0f/600.0f,0.1,100); //считаем матрицу проэкции
dev->SetTransform(D3DTS_PROJECTION,&pr);//устанавливаем матрицу проэкции
dev->SetRenderState(D3DRS_ZENABLE,true); //Включаем Z-буффер, для управлений глубиной прорисовки объектов.
D3DMATERIAL9 mat; //создаём материал
ZeroMemory(&mat,sizeof(mat));
mat.Diffuse.a=1;
mat.Diffuse.r=1; //красный
dev->SetMaterial(&mat); //устанавливаем тукущий материал
D3DLIGHT9 l; //создаём свет
ZeroMemory(&l,sizeof(l));
l.Type=D3DLIGHT_POINT;//точечное освещение
l.Diffuse.a=1;
l.Diffuse.r=1;
l.Diffuse.g=1;
l.Diffuse.b=1; //белый цвет
l.Position=D3DXVECTOR3(2,5,-3); //позиция источника цвета
l.Range=100; //диапазон
l.Attenuation0=1; //.
dev->SetLight(0,&l);//установка света
dev->LightEnable(0,true);//включаем свет
dev->SetRenderState(D3DRS_LIGHTING,true);//включаем возможность освещения
Устанавливаем матрицу вида:
D3DMATRIX view;
D3DXMatrixIdentity((D3DXMATRIX*)&view); //устанавливаем матрицу вида, т.к. камера у нас не двигается - ставим пустую матрицу.
dev->SetTransform(D3DTS_VIEW,&view); //ставим
Всё, дальше лень комментировать, вобщем вот главный цикл. Что не понятно - спрашивай.
D3DMATRIX w;
D3DXMatrixTranslation((D3DXMATRIX*)&w,0,0,5);//матрица мира. Ставим объек в позицию 0, 0, 5
D3DMATRIX rm;
r+=0.01;
D3DXMatrixRotationY((D3DXMATRIX*)&rm,r);//матрица поворота
dev->SetTransform(D3DTS_WORLD,&w);//поворачиваем вокруг Y на r радиан
Читайте также: