В этом уроке я расскажу как инициализировать Direct 3D.Для этого нам понадобится DirectX SDK 9,его можно скачать по этой ссылке.Установите DirectX SDK(устанавливается он довольно легко,так что я не буду рассказывать как его установить).Дальше нам надо настроить студию.
1) Откройте Visual Studio и в меню Tools выберите пункт
Options. 2) Откройте пункт Projects and Solutions и в
нём выберите VC++ Directories. 3) Найдите надпись Show
Directories For и в списке снизу выберите Include Files. 4) Щелкните на кнопке New Line ,после
этого появится новая
строчка в списке папок. 5) Щёлкните на этой строке и в
конце строки появится кнопка,нажмите на неё и выберите папку с
заголовочными файлами. 6) Нажмите ОК.Готово! Теперь перейдём к коду. Откройте проект из предыдущего урока и в начале кода после #include <windows.h> вставьте следующее : #include <d3d9.h> //Подключаем заголовочный файл для Direct 3D #pragma comment(lib, "d3d9.lib) //Подключаем бибилотечный файл Direct 3D Дальше нам нужно инициализировать пару структур, которые будут отвечать в целом за Direct3D. Вставте этот код после строки HWND hWnd; LPDIRECT3D9 p_d3d = NULL; //Главный интерфейс отвечающий за Direct 3D LPDIRECT3DDEVICE9 p_d3d_Device = NULL;//Наше устройство Без указателя p_d3d у нас ничего не выйдет, он обязательно нужен, чтобы инициализировать Direct3d. Указатель p_d3d_Device нужен для работы с графикой.В функцию AppInit,после строки UpdateWindow(hWnd); добавим сдедующий код : p_d3d = Direct3DCreate9 (D3D_SDK_VERSION); D3DDISPLAYMODE d3ddm; p_d3d->GetAdapterDisplayMode (D3DADAPTER_DEFAULT, &d3ddm); D3DPRESENT_PARAMETERS d3dpp; ZeroMemory (&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = true; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format; p_d3d->CreateDevice (D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &p_d3d_Device); return true; Direct3DCreate9 создает объект Direct3D и присваивает адрес указателю p_d3d. Затем мы получаем режим адаптера, в котором он сейчас работает (Direct3D у нас создался) и заносим все его параметры в структуру d3ddm. Структура d3dpp содержит в себе параметры заднего буфера (т.е. та часть экрана, которую мы не видим, но увидим позже). При помощи функции ZeroMemory данный буфер заполняем нулями, чтобы в нем не было мусора. Если Windowed истинный (включен) то данное приложение воспринимать как оконное, если нет (false), то полноэкранным (им мы воспользуемся позже). D3DSWAPEFFECT_DISCARD говорит о том, что мы будем данному приложению сообщать о времени, когда можно использовать буфер для заполнения нашими параметрами. Строка d3dpp.BackBufferFormat = d3ddm.Format; в данном случае нужна, потому что у нас, как мы ранее поставили, оконный режим и должен соответствовать формату текущего показа. А далее создаем устройство при помощи функции CreateDevice принадлежащий главному интерфейсу. Параметр D3DADAPTER_DEFAULT говорит, что используется первичный адаптер. Второй параметр в качестве желательного устройства несет D3DDEVTYPE_HAL - используем ускоритель и программный эмулятор, в случае если ускоритель не поддерживает функций. D3DCREATE_SOFTWARE_VERTEXPROCESSING - определяет средства обработки вершин. Дальше присваиваем адрес буфера и адрес устройства представляемому устройству, который будет использовать эти структуры. Ну вот, с инициализацией покончили, все назначили, а как мы назначили, так мы должны и удалить все это корректно, добавьте в функцию WinMain после всего цикла while: DestroyDirect3D9 (); Теперь напишем функцию DestroyDirect3D9 () void DestroyDirect3D9 (void) { _RELEASE_ (p_d3d_Device); _RELEASE_ (p_d3d); } Для того чтобы работала функция DestroyDirect3D9 нам нужно добавить макрос _RELEASE_,добавьте этот код после строки #pragma comment(lib, "d3d9.lib") #define _RELEASE_(p) { if(p) { (p)->Release(); (p)=NULL; };}; #define _DELETE_(p) { if(p) { delete (p); (p)=NULL; };}; Подведём итоги:в этом уроке мы только инициализировали Direct 3D ,поэтому ничего нового не появилось.Но ничего, дальше мы начнем писать код,
где наш глаз уже заметит изменения на мониторе ;)
Компилируйте и радуйтесь! Скачать исходник можно по этой ссылке!
|