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

10.4. Оптимизация

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

HRESULT ID3DXMesh::OptimizeInplace(
     DWORD Flags,
     CONST DWORD* pAdjacencyIn,
     DWORD* pAdjacencyOut,
     DWORD* pFaceRemap,
     LPD3DXBUFFER* ppVertexRemap
);

Пример вызова метода:

// Получаем информацию о смежности граней
// неоптимизированной сетки
DWORD adjacencyInfo[Mesh->GetNumFaces() * 3];
Mesh->GenerateAdjacency(0.0f, adjacencyInfo);

// Массив для хранения информации о смежности граней
// оптимизированной сетки
DWORD optimizedAdjacencyInfo[Mesh->GetNumFaces() * 3];

Mesh->OptimizeInplace(
     D3DXMESHOPT_ATTRSORT |
     D3DXMESHOPT_COMPACT |
     D3DXMESHOPT_VERTEXCACHE,
     adjacencyInfo,
     optimizedAdjacencyInfo,
     0,
     0);

Существует похожий метод Optimize, который вместо того чтобы оптимизировать исходную сетку, возвращает новый оптимизированный объект сетки и оставляет исходную сетку неизменной.

HRESULT ID3DXMesh::Optimize(
     DWORD Flags,
     CONST DWORD* pAdjacencyIn,
     DWORD* pAdjacencyOut,
     DWORD* pFaceRemap,
     LPD3DXBUFFER* ppVertexRemap,
     LPD3DXMESH* ppOptMesh // возвращает оптимизированную сетку
);

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

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