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

UptoLike

11
d3dpp.Windowed = FALSE;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.Presentationlnterval = D3DPRESENT_INTERVAL_DEFAULT;
}
else {
//Оконный режим
RECT wndRect;
RECT clientRect;
GetWindowRect(hWnd, &wndRect);
GetClientRect(hWnd, &clientRect);
int iWinWidth = iWidth + (wndRect.right-wndRect.left) -
(clientRect.right-clientRect.left);
int iWinHeight = iHeight + (wndRect.bottom-wndRect.top) -
(clientRect.bottom-clientRect.top);
MoveWindow(hWnd, wndRect.left, wndRect.top,
iWinWidth, iWinHeight, TRUE);
// Получить формат пиксела D3DDISPLAYMODE d3ddm;
(*ppiD3D9)->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
// Установка параметров
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = TRUE;
// Создать ЗD-устройство
DWORD Flags= D3DCREATE_MIXED_VERTEXPROCESSING |
D3DCREATE_MULTITHREADED;
HRESULT hRes;
if(FAILED(hRes = (*ppiD3D9)->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, hWnd, Flags,
&d3dpp, ppiD3DDevice9)))
return hRes;
// Установить перспективу
float Aspect =
(float)d3dpp.BackBufferWidth / (float)d3dpp.BackBufferHeight;
D3DXMATRIX matProjection;
D3DXMatrixPerspectiveFovLH(&matProjection, D3DX_PI/4.Of,
Aspect, 10.Of, 1000.Of);
(*ppiD3DDevice9)->SetTransform(D3DTS_PROJECTION, matProjection);
return S_OK;
}
}
Давайте рассмотрим содержимое листинга и познакомимся с функциями
инициализации Direct3D.
Первое, что мы делаем, создаем экземпляр интерфейса iDirect3D9 с
помощью функции Direct3DCreate9 и сохраняем результат в переменной
*ppiD3D9.
Далее заполняется структура типа D3DPRESENT_PARAMETERS, которая
определяет параметры представления. Заполняем основные свойства, которые
     d3dpp.Windowed = FALSE;
     d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
     d3dpp.Presentationlnterval = D3DPRESENT_INTERVAL_DEFAULT;
    }
    else {
      //Оконный режим
      RECT wndRect;
      RECT clientRect;
      GetWindowRect(hWnd, &wndRect);
      GetClientRect(hWnd, &clientRect);
      int iWinWidth = iWidth + (wndRect.right-wndRect.left) -
      (clientRect.right-clientRect.left);
      int iWinHeight = iHeight + (wndRect.bottom-wndRect.top) -
      (clientRect.bottom-clientRect.top);
      MoveWindow(hWnd, wndRect.left, wndRect.top,
      iWinWidth, iWinHeight, TRUE);
      // Получить формат пиксела D3DDISPLAYMODE d3ddm;
      (*ppiD3D9)->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
      // Установка параметров
      d3dpp.BackBufferFormat = d3ddm.Format;
      d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
      d3dpp.Windowed = TRUE;
      // Создать ЗD-устройство
      DWORD Flags= D3DCREATE_MIXED_VERTEXPROCESSING |
      D3DCREATE_MULTITHREADED;
      HRESULT hRes;
      if(FAILED(hRes = (*ppiD3D9)->CreateDevice(
      D3DADAPTER_DEFAULT,
      D3DDEVTYPE_HAL, hWnd, Flags,
      &d3dpp, ppiD3DDevice9)))
      return hRes;
      // Установить перспективу
      float Aspect =
      (float)d3dpp.BackBufferWidth / (float)d3dpp.BackBufferHeight;
      D3DXMATRIX matProjection;
      D3DXMatrixPerspectiveFovLH(&matProjection, D3DX_PI/4.Of,
      Aspect, 10.Of, 1000.Of);
      (*ppiD3DDevice9)->SetTransform(D3DTS_PROJECTION, matProjection);
      return S_OK;
    }
}
    Давайте рассмотрим содержимое листинга и познакомимся с функциями
инициализации Direct3D.
    Первое, что мы делаем, — создаем экземпляр интерфейса iDirect3D9 с
помощью функции Direct3DCreate9 и сохраняем результат в переменной
*ppiD3D9.
    Далее заполняется структура типа D3DPRESENT_PARAMETERS, которая
определяет параметры представления. Заполняем основные свойства, которые


                                      11