Создание сетки (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] //выходной формат );
ПРИМЕЧАНИЕ
Эта функция получает настраиваемый формат вершин FVF и возвращает соответствующий ему массив структур D3DVERTEXELEMENT9. Взгляните на определение MAX_FVF_DECL_SIZE:
typedef enum { MAX_FVF_DECL_SIZE = 18 } MAX_FVF_DECL_SIZE;