Понедельник
29.04.2024, 14:55
Приветствую Вас Гость | RSS
Главная Каталог статей Регистрация Вход
Меню сайта

Категории раздела
Уроки програмирования игр на IrrLicht [7]
Уроки програмирования на игровом движке IrrLicht
Обработка цифровых изображений [0]
Различные способы реализации графических фильтровов,работа с цветовыми пространствами
Програмирование игр с использованием DirectX [3]
Програмирование трёхмерной графики на DirectX под Windows

Наш опрос
На каком языке вы програмируете?
Всего ответов: 209

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » Програмирование » Програмирование игр с использованием DirectX

Урок 2.Инициализация DirectX в оконном режиме.
В этом уроке я расскажу как инициализировать 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 ,поэтому ничего нового не появилось.Но ничего, дальше мы начнем писать код, где наш глаз уже заметит изменения на мониторе ;)


Компилируйте и радуйтесь!

Скачать исходник можно по этой ссылке!

Категория: Програмирование игр с использованием DirectX | Добавил: mannn (27.07.2010)
Просмотров: 4526 | Комментарии: 3 | Рейтинг: 0.0/0
Всего комментариев: 2
2 Rostislav2657  
0
здесь на этом портале вы сумеете увидеть огромный выбор умных статей про http://medbaz.com/pages-more-446.html - признаки рака кишечника.

1 Ostap0633  
0
на веб-ресурсе можно увидеть большой выбор умных статей про http://ublaze.ru/forum/ftopic1202.html - Прошивка Samsung ST-S5830

Имя *:
Email *:
Код *:
Поиск

Друзья сайта
  • Самый свежий NET.Framework
  • Програмирование игр на OpenGL
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright by ZHABIN GRAD © 2024