Введение в программирование трехмерных игр с DX9

       

Создание сетки (DXCreateMeshFVF)

До сих пор мы создавали сетки с помощью функций D3DXCreate*. Однако мы также можем создать «пустую» сетку, воспользовавшись функцией D3DXCreateMeshFVF. Говоря о создании пустой сетки мы подразумеваем, что указываем количество вершин и граней, входящих в сетку, после чего функция D3DXCreateMeshFVF создает буферы вершин, индексов и атрибутов требуемого размера. После того, как буферы созданы, мы вручную заполняем их данными сетки (это значит, что мы должны записать данные вершин, индексы и атрибуты в буфер вершин, буфер индексов и буфер атрибутов, соответственно).

Как уже было сказано, для создания пустой сетки используется функция D3DXCreateMeshFVF:

HRESULT D3DXCreateMeshFVF( DWORD NumFaces, DWORD NumVertices, DWORD Options, DWORD FVF, LPDIRECT3DDEVICE9 pDevice, LPD3DXMESH* ppMesh );

NumFaces — Количество граней в создаваемой сетке. Должно быть больше нуля.

NumVertices — Количество вершин в создаваемой сетке. Должно быть больше нуля.

Options — Один или несколько флагов, определяющих параметры создаваемой сетки. Полный список флагов приведен в описании перечисления D3DXMESH в документации SDK. Наиболее часто используются следующие флаги:

D3DXMESH_32BIT — Сетка будет использовать 32-разрядные индексы.

D3DXMESH_MANAGED — Сетка будет размещена в управляемом пуле памяти.

D3DXMESH_WRITEONLY — Данные сетки будут только записываться и не будут читаться.

D3DXMESH_DYNAMIC — Буферы сетки будут динамическими.

FVF — Настраиваемый формат вершин для создаваемой сетки.

pDevice — Связанное с сеткой устройство.

ppMesh — Возвращает созданную сетку.

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

Вы также можете создать пустую сетку с помощью функции D3DXCreateMesh. Ее прототип выглядит так:

HRESULT D3DXCreateMesh( DWORD NumFaces, DWORD NumVertices, DWORD Options, CONST LPD3DVERTEXELEMENT9* pDeclaration, LPDIRECT3DDEVICE9 pDevice, LPD3DXMESH* ppMesh );

Все параметры, за исключением четвертого, аналогичны параметрам функции D3DXCreateMeshFVF. Вместо того, чтобы указать формат вершин (FVF), мы передаем функции описывающий формат вершин массив структур D3DVERTEXELEMENT9. Сейчас мы не будем углубляться в изучение структуры D3DVERTEXELEMENT9; однако следует упомянуть следующую связанную функцию:

HRESULT D3DXDeclaratorFromFVF( DWORD FVF, // входной формат D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE] //выходной формат );

ПРИМЕЧАНИЕ

Структура D3DVERTEXELEMENT9 обсуждается в главе 17.

Эта функция получает настраиваемый формат вершин FVF и возвращает соответствующий ему массив структур D3DVERTEXELEMENT9. Взгляните на определение MAX_FVF_DECL_SIZE:

typedef enum { MAX_FVF_DECL_SIZE = 18 } MAX_FVF_DECL_SIZE;



Содержание раздела