double arrow
Создание интерфейса устройства и инициализация дисплея

Для создания Direct3D устройства используется метод CreateDevice интерфейса IDirect3D. В общем виде метод выглядит следующим образом:

HRESULT CreateDevice( UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DDevice9** ppReturnedDeviceInterface);

Параметры функции:

· Adapter – номер адаптера, который необходимо использовать. В большинстве случаев достаточно использовать первичный адаптер и на него ссылается константа D3DADAPTER_DEFAULT;

· DeviceType – тип устройства. Здесь можно указать одно из следующих значений:

D3DDEVTYPE_HAL – использовать аппаратные возможности. Этот параметр является более предпочтительным.

D3DDEVTYPE_REF – использовать программные возможности, но если есть возможность, можно применять специализированные инструкции процессора;

D3DDEVTYPE_SW – использовать программное устройство;

· hFocusWindow – окно, которое будет использоваться для вывода графики. Это должно быть верхнее (поверх всех) или полноэкранное окно;


· BehaviorFlags – дополнительные параметры создания устройства;


· pPresentationParameters – указатель на структуру типа D3DPRESENT_PARAMETERS;

· ppReturnedDeviceInterface– указатель на указатель на переменную типа IDirect3DDevice9, в которую будет сохранен интерфейс созданного устройства (возвращает указатель на созданное устройство).

Пример вызова метода в функции DX3DInit:

HRESULT hRes;if(FAILED(hRes = (*ppiD3D9)->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, Flags, &d3dpp, ppiD3DDevice9))) return hRes;

Устройство создано, и мы готовы к работе, но еще желательно настроить параметры камеры.


Работа Direct3D с трехмерным миром.




Для перемещения объекта в трёхмерном пространстве вдоль какой - либо оси достаточно изменить координаты каждой из вершин в ту или иную сторону. При повороте необходимо применять формулы, основанные на синусе и косинусе.

Для поворота вокруг нескольких осей сразу, нужно применять эти формулы по очереди для каждой оси в отдельности. Для избавления от этого недостатка была разработана, так называемая, однородная система координат, где все действия над объектами было очень удобно производить с помощью МАТРИЦ.

Если хотели произвести сразу много действий, то просто перемножали матрицы нужных операций и результирующую матрицу, содержащую в себе все преобразования, уже применяли к вершинам всего обьекта. Все системы просчета 3D графики работают с матрицами.

Матрица представляет собой обычную числовую таблицу из строк и столбцов. Вот как она выглядит:



|а11 a12 a13 a14|- матрица 4х4. Всего 16 элементов. Каждый элемент имеет |a21 a22 a23 a24| обозначение. Буквой обозначается элемент, а цифрами место |a31 a32 a33 a34| расположения в матрице. Например "a23" - это элемент, |a41 a42 a43 a44| стоящий на второй строке в третьем столбце.

Размер каждого элемента в матрице – 4 байта. Соответственно, размер в памяти, который занимает одна матрица, равен 64 байтам.

Существуют три основные матрицы при работе с DirectX:

· World Matrix (мировая матрица)

· View Matrix (матрица вида)

· Matrix Projection (матрица проекции).

"Мировая матрица" отвечает за преобразование всей сцены (вращение вокруг осей, перемещение и т.д.). "Матрица вида" отвечает за то, какая часть сцены будет видна на экране. "Матрица проекции" отвечает за то, как трехмерные координаты будут преобразованы в двумерные для отображения на экран.

С помощью этих трёх метриц Direct3D превращает трехмерный мир в плоскую картинку на мониторе.







Сейчас читают про: