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

UptoLike

12
будут идентичны для полноэкранного и оконного режимов, а именноширина и
высота заднего буфера:
d3dpp.BackBufferWidth = iWidth;
d3dpp.BackBufferHeight = iHeight;
Здесь мы задаем ширину и высоту буфера. Далее запрашиваем у
пользователя с помощью окна MessageBox, необходимо ли отобразить окно в
полноэкранном режиме? Если да, то продолжаем заполнять структуру
параметрами, которые должны использоваться в полноэкранном режиме:
d3dpp.BackBufferFormat = D3DFMT_R5G6B5;
d3dpp.SwapEffeet = D3 DSWAPE FFECT_FLIP;
d3dpp.Windowed = FALSE;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.Presentationlnterval = D3DPRESENT_INTERVAL_DE FAULT;
В качестве формата пиксела выбран D3DFMT_R5G6B5, при котором 16 бит
для хранения цвета делятся в следующем соотношении: красный 5 бит,
зеленый 6 бит и голубой 5 бит. Шестнадцать бит позволяют использовать
65535 цветов, а этого достаточно, чтобы создавать реалистичные эффекты, и при
этом производительность будет довольно высокая.
Помимо формата пиксела, для переключения буфера будем использовать
метод D3DSWAPEFFECT_FLIP, который является самым быстрым, но может
применяться только в полноэкранном режиме. Свойство Windowed устанавливаем
в false, потому что это полноэкранный режим. И самое важное устанавливаем
частоту смены экрана в значение по умолчанию
D3DPRESENT_RATE_DEFAULT.
В случае с оконным режимом мы сначала должны изменить размеры окна
так, чтобы они соответствовали выбранным размерам. Для этого определяем
текущее положение окна и с помощью функции MoveWindow устанавливаем
новые размеры:
RECT wndRect;
RECT clientRect;
GetWindowRect(hWnd, &wndRect);
GetClientRect(hWnd, &clientRect);
int iWinWidth = iWidth + (wndRect.right-wndRect.left) -
(clientRect. right-clientRect. left1)';
int iWinHeight = iHeight + (wndRect.bottom-wndRect.top) -
(clientRect.bottom-clientRect.top);
MoveWindow(hWnd, wndRect.left, wndRect.top,
iWinWidth, iWinHeight, TRUE);
Поскольку у нас будет использоваться оконный режим, то мы не можем
выбрать формат пиксела, поэтому придется использовать тот формат, который
сейчас установлен в Windows. Для этого используется метод
GetAdapterDisplayMode интерфейса iDirect3D. Этому методу нужно передать два
параметра:
адаптер, информацию о котором нужно получить. Мы будем
использовать первичный адаптер (D3DADAPTER_DEFAULT);
будут идентичны для полноэкранного и оконного режимов, а именно — ширина и
высота заднего буфера:
d3dpp.BackBufferWidth = iWidth;
d3dpp.BackBufferHeight = iHeight;
    Здесь мы задаем ширину и высоту буфера. Далее запрашиваем у
пользователя с помощью окна MessageBox, необходимо ли отобразить окно в
полноэкранном режиме? Если да, то продолжаем заполнять структуру
параметрами, которые должны использоваться в полноэкранном режиме:
d3dpp.BackBufferFormat = D3DFMT_R5G6B5;
d3dpp.SwapEffeet = D3 DSWAPE FFECT_FLIP;
d3dpp.Windowed = FALSE;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.Presentationlnterval = D3DPRESENT_INTERVAL_DE FAULT;
     В качестве формата пиксела выбран D3DFMT_R5G6B5, при котором 16 бит
для хранения цвета делятся в следующем соотношении: красный — 5 бит,
зеленый — 6 бит и голубой — 5 бит. Шестнадцать бит позволяют использовать
65535 цветов, а этого достаточно, чтобы создавать реалистичные эффекты, и при
этом производительность будет довольно высокая.
     Помимо формата пиксела, для переключения буфера будем использовать
метод D3DSWAPEFFECT_FLIP, который является самым быстрым, но может
применяться только в полноэкранном режиме. Свойство Windowed устанавливаем
в false, потому что это полноэкранный режим. И самое важное — устанавливаем
частоту       смены        экрана     в      значение      по     умолчанию
D3DPRESENT_RATE_DEFAULT.
     В случае с оконным режимом мы сначала должны изменить размеры окна
так, чтобы они соответствовали выбранным размерам. Для этого определяем
текущее положение окна и с помощью функции MoveWindow устанавливаем
новые размеры:
RECT wndRect;
RECT clientRect;
GetWindowRect(hWnd, &wndRect);
GetClientRect(hWnd, &clientRect);
int iWinWidth = iWidth + (wndRect.right-wndRect.left) -
  (clientRect. right-clientRect. left1)';
int iWinHeight = iHeight + (wndRect.bottom-wndRect.top) -
    (clientRect.bottom-clientRect.top);
MoveWindow(hWnd, wndRect.left, wndRect.top,
    iWinWidth, iWinHeight, TRUE);
    Поскольку у нас будет использоваться оконный режим, то мы не можем
выбрать формат пиксела, поэтому придется использовать тот формат, который
сейчас   установлен    в   Windows.     Для    этого  используется   метод
GetAdapterDisplayMode интерфейса iDirect3D. Этому методу нужно передать два
параметра:
    − адаптер, информацию о котором нужно получить. Мы будем
       использовать первичный адаптер (D3DADAPTER_DEFAULT);

                                        12