Основы построения 3-х мерных сцен с использованием библиотеки DirectX. Макушкина Л.А - 8 стр.

UptoLike

10
Добавим в шаблон DirectX-приложения вызов функции инициализации. Для
этого в основном модуле программы объявим две переменные для хранения
создаваемых интерфейсов на iDirect3D9 и устройство IDirect3DDevice9:
IDirect3D9 *pD3D = NULL;
IDirect3DDevice9 *pD3DDevice = NULL;
Вызов функции инициализации пишем в функции InitInstance после создания
окна, но перед отображением и перерисовкой главного окна:
// Вызов функции инициализации
// Если результат работы функции не равен S_OK,
// то произошла ошибка
if (DX3DInit(&pD3D, &pD3DDevice, hWnd, 800, 600, FALSE)!=S_OK)
{
MessageBox(hWnd, "Ошибка инициализации DirectX", "Error", MB_OK);
return FALSE;
}
// Отображение и обновление окна
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
Теперь посмотрим на содержимое файла dxfunc.cpp (листинг 1.2) и
соответственно функции DX3Dinit. В файле у нас находится только подключение
заголовочного файла dxfunc.h и непосредственно сама функция инициализации.
Листинг 1.2. Содержимое файла dxfunc.cpp
#include "dxfunc.h"
// Функция инициализации
Direct3D HRESULT DX3DInit(IDirect3D9 **ppiD3D9,
IDirect3DDevice9 **ppiD3DDevice9,
HWND hWnd, DWORD iWidth, DWORD iHeight, BOOL bFullScreen)
{
// Инициализация
if((*ppiD3D9 = Direct3DCreate9(D3D_SDK_VERSION)) = NULL)
return E_FAIL;
// Заполняем основные параметры
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof (d3dpp)) ;
d3dpp.BackBufferWidth = iWidth;
d3dpp.BackBufferHeight = iHeight;
// Запрос на отображение в полноэкранном режиме
int iRes;
if (!bFullScreen)
iRes=MessageBox(hWnd, "Use fullscreen mode?",
"Screen", MB_YESNO | MB_ICONQUESTION);
else
iRes = IDYES;
if(iRes == IDYES) {
//Полноэкранный режим
//Установка параметров полноэкранного режима
d3dpp.BackBufferFormat = D3DFMT_R5G6B5;
d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP;
    Добавим в шаблон DirectX-приложения вызов функции инициализации. Для
этого в основном модуле программы объявим две переменные для хранения
создаваемых интерфейсов на iDirect3D9 и устройство IDirect3DDevice9:
IDirect3D9     *pD3D    = NULL;
IDirect3DDevice9 *pD3DDevice = NULL;
    Вызов функции инициализации пишем в функции InitInstance после создания
окна, но перед отображением и перерисовкой главного окна:
// Вызов функции инициализации
// Если результат работы функции не равен S_OK,
// то произошла ошибка
if (DX3DInit(&pD3D, &pD3DDevice, hWnd, 800, 600, FALSE)!=S_OK)
{
  MessageBox(hWnd, "Ошибка инициализации DirectX", "Error", MB_OK);
  return FALSE;
}
// Отображение и обновление окна
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
     Теперь посмотрим на содержимое файла dxfunc.cpp (листинг 1.2) и
соответственно функции DX3Dinit. В файле у нас находится только подключение
заголовочного файла dxfunc.h и непосредственно сама функция инициализации.
    Листинг 1.2. Содержимое файла dxfunc.cpp
#include "dxfunc.h"
// Функция инициализации
Direct3D HRESULT DX3DInit(IDirect3D9 **ppiD3D9,
            IDirect3DDevice9 **ppiD3DDevice9,
            HWND hWnd, DWORD iWidth, DWORD iHeight, BOOL bFullScreen)
{
  // Инициализация
  if((*ppiD3D9 = Direct3DCreate9(D3D_SDK_VERSION)) = NULL)
    return E_FAIL;
  // Заполняем основные параметры
  D3DPRESENT_PARAMETERS d3dpp;
  ZeroMemory(&d3dpp, sizeof (d3dpp)) ;
  d3dpp.BackBufferWidth = iWidth;
  d3dpp.BackBufferHeight = iHeight;
  // Запрос на отображение в полноэкранном режиме
  int iRes;
  if (!bFullScreen)
    iRes=MessageBox(hWnd, "Use fullscreen mode?",
    "Screen", MB_YESNO | MB_ICONQUESTION);
  else
    iRes = IDYES;
  if(iRes == IDYES) {
    //Полноэкранный режим
    //Установка параметров полноэкранного режима
    d3dpp.BackBufferFormat = D3DFMT_R5G6B5;
    d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP;

                                       10