图形学 Direct3D的3D模型处理2 - 邻接三角形的信息及优化
DWORD* adjacencyInfo = new DWORD[Mesh->GetNumFaces() * 3];Mesh->GenerateAdjacency(0.001f, adjacencyInfo);
顶点和索引合理安排可以更加有效的渲染mesh模型。
Direct3D函数:
HRESULT ID3DXMesh::Optimize( DWORD Flags, CONST DWORD *pAdjacencyIn, DWORD *pAdjacencyOut, DWORD *pFaceRemap, LPD3DXBUFFER *ppVertexRemap, LPD3DXMESH *ppOptMesh);
应用:
// 读取未优化的mesh信息DWORD* adjacencyInfo = new DWORD[Mesh->GetNumFaces() * 3];Mesh->GenerateAdjacency(0.0f, adjacencyInfo);// 用来保存新的优化了的mesh邻接三角形信息DWORD* optimizedAdjacencyInfo = new DWORD[Mesh->GetNumFaces() * 3];ID3DXMesh* meshOut = 0;//新的mesh模型Mesh->Optimize(D3DXMESH_MANAGED | D3DXMESHOPT_COMPACT |D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE,adjacencyInfo, optimizedAdjacencyInfo, 0, 0, &meshOut);
下面的函数是直接优化原mesh模型:
HRESULT ID3DXMesh::OptimizeInplace( DWORD Flags, CONST DWORD *pAdjacencyIn, DWORD *pAdjacencyOut, DWORD *pFaceRemap, LPD3DXBUFFER *ppVertexRemap
这里并没有太多深入其原理。只是讲用法。
Reference:
Direct3D龙书