Геометрия сетки
В интерфейсе ID3DXBaseMesh есть буфер вершин, хранящий данные обо всех вершинах сетки, и буфер индексов, описывающий то, как вершины сетки группируются в треугольные ячейки. Мы можем получить указатели на эти буферы с помощью следующих методов:
HRESULT ID3DXMesh::GetVertexBuffer(LPDIRECT3DVERTEXBUFFER9* ppVB); HRESULT ID3DXMesh::GetIndexBuffer(LPDIRECT3DINDEXBUFFER9* ppIB);
А вот пример того, как эти методы используются в программе:
IDirect3DVertexBuffer9* vb = 0; Mesh->GetVertexBuffer(&vb);
IDirect3DIndexBuffer9* ib = 0; Mesh->GetIndexBuffer(&ib);
ПРИМЕЧАНИЕ
Также, если мы хотим заблокировать буфер для чтения или записи, можно воспользоваться приведенной ниже парой методов. Обратите внимание, что эти методы блокируют весь буфер вершин или индексов.
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() — Возвращает количество граней (треугольных ячеек) в сетке.