Применение библиотеки DirectX

Листинг 23.7

finclude <windows.h> finclude <d3dx9math.h> finclude "My3D.h" LPDIRECT3D9 D3D - NULL;

LPDIRECT3DDEVICE9 Device - NULL: //Указатель на IDirect3DDevice9.

D3DVIEWP0RT9 VP - {0.0. 0.0.0.0.1.Of}; // сюда рисуем в режиме шторки.

RECT WindowVP; //сюда рисуем в режиме линзы

BOOL Lens - TRUE: //Поведение картинки при изменении окна

RECT Т1;

D3DPRESENT_PARAMETERS d3dpp; HRESULT StartDirectXCHWND hWnd ) {
1f(!D3D)
if( NULL--(D3D«Direct3DCreate9(D3D_SDK_VERSI0N))) return E_FAIL; D3DPRESENT_PARAMETERS d3dpp;

RECT T2; //Запоминаем размеры окна, заданные при его создании:

GetWindowRect(hWnd.&T2):

//Раскрываем окно на весь экран:

MoveWidow(hWnd. 0.0. GetSystemMetrics(SM_CXSCREEN).

GetSystemMetrics(SM_CYSCREEN ).FALSE); GetClientRect(hWnd.&Tl): //Сохраняем положение угла рабочей области ClientToScreen(hWnd.(POINT *)&Т1): //на экране для использования VP.Width - Tl.right: //при кадрировании. VP.Height - Tl.bottom;

MoveWi ndow(hWnd.12.1eft.12.top.12.ri ght.12.bottom.FALSE): //Восстанавливаем исходные размеры окна. ZeroMemoryC &d3dpp. sizeof(d3dpp)): d3dpp.BackBufferWidth - GetSystemMetrics(SM_CXSCREEN); d3dpp.BackBufferHeight - GetSystemMetrics(SM_CYSCREEN ): //Запрашиваем размер экрана и создаем буфер d3dpp.Windowed - TRUE; d3dpp.SwapEffect - D3DSWAPEFFECT_C0PY; d3dpp.BackBufferFormat - D3DFMT_UNKN0WN; d3dpp.EnableAutoDepthStencil - TRUE; d3dpp.AutoDepthStencilFormat - D3DFMT_D16; d3dpp. BackBufferCount - 1; d3dpp.hDeviceWindow - hWnd; if(Device) {

Device->Release();Device - NULL; //Если уже был создан интерфейс -//уменьшить счетчик обращений к СОМ-объекту. иначе он никогда не //выгрузится из памяти.

}
if( FAILEDC D3D->CreateDevice( D3DADAPTER_DEFAULT.D3DDEVTYPE_HAL. hWnd.
D3DCREATE_S0FTWARE_VERTEXPR0CESSING. &d3dpp. SDevice)))
{
1f( FAILEDC D3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF,
hWnd. D3DCREATE_S0FTWARE_VERTEXPR0CESSING. &d3dpp. &Device))) return E_FAIL; }

OnMove (hWnd.0.0.0); //Задание начального положения области просмотра.


⇐ Предыдущая| |Следующая ⇒