netlib.narod.ru< Назад | Оглавление | Далее >

10.8. Создание сетки (D3DXCreateMeshFVF)

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

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

HRESULT D3DXCreateMeshFVF(
     DWORD NumFaces,
     DWORD NumVertices,
     DWORD Options,
     DWORD FVF,
     LPDIRECT3DDEVICE9 pDevice,
     LPD3DXMESH* 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;

netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz