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

       

Геометрия сетки

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

HRESULT ID3DXMesh::GetVertexBuffer(LPDIRECT3DVERTEXBUFFER9* ppVB); HRESULT ID3DXMesh::GetIndexBuffer(LPDIRECT3DINDEXBUFFER9* ppIB);

А вот пример того, как эти методы используются в программе:

IDirect3DVertexBuffer9* vb = 0; Mesh->GetVertexBuffer(&vb);

IDirect3DIndexBuffer9* ib = 0; Mesh->GetIndexBuffer(&ib);

ПРИМЕЧАНИЕ

Учтите, что в качестве примитивов в интерфейсе ID3DXMesh поддерживаются только индексированные списки треугольников.

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

HRESULT ID3DXMesh::LockVertexBuffer(DWORD Flags, BYTE** ppData); HRESULT ID3DXMesh::LockIndexBuffer(DWORD Flags, BYTE** ppData);

Параметр Flags указывает, как именно должна осуществляться блокировка. Флаги блокировки буферов вершин и индексов были описаны в главе 3, где мы впервые познакомились с этими буферами. Аргумент ppData — это адрес указателя, который после завершения работы функции будет указывать на занятую буфером область памяти.

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

HRESULT ID3DXMesh::UnlockVertexBuffer(); HRESULT ID3DXMesh::UnlockIndexBuffer();

Ниже приведен список дополнительных методов интерфейса ID3DXMesh, которые можно использовать для получения информации о геометрии сетки:

DWORD GetFVF() — Возвращает значение типа DWORD, описывающее формат вершин сетки.

DWORD GetNumVertices() — Возвращает количество вершин в буфере вершин.

DWORD GetNumBytesPerVertex() — Возвращает количество байт, занимаемых описанием одной вершины.

DWORD GetNumFaces() — Возвращает количество граней (треугольных ячеек) в сетке.



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