[英]Mesh Optimization
生成網格的類。 頂點數越多,幀下降越快,我應該如何優化它? 我已經使用了 OptimizeInplace 函數,但我只能期待 10 幀的改進。
void Sprite::initialize()
{
LPD3DXBUFFER pD3DXMtrlBuffer;
D3DXLoadMeshFromX(fileName.c_str(), D3DXMESH_SYSTEMMEM, Render->g_pDevice, NULL,
&pD3DXMtrlBuffer, NULL, &m_dwNumMaterials, &m_pMesh);
D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
m_pMeshMaterials = new D3DMATERIAL9[m_dwNumMaterials];
m_pMeshTextures = new LPDIRECT3DTEXTURE9[m_dwNumMaterials];
for (DWORD i = 0; i < m_dwNumMaterials; i++)
{
m_pMeshMaterials[i] = d3dxMaterials[i].MatD3D;
m_pMeshMaterials[i].Ambient = m_pMeshMaterials[i].Diffuse;
m_pMeshTextures[i] = NULL;
if (d3dxMaterials[i].pTextureFilename != NULL)
{
D3DXCreateTextureFromFileA(Render->g_pDevice, d3dxMaterials[i].pTextureFilename, &m_pMeshTextures[i]);
}
}
pD3DXMtrlBuffer->Release();
std::vector<DWORD> adjacencyBuffer(m_pMesh->GetNumFaces() * 3);
m_pMesh->GenerateAdjacency(0.0f, &adjacencyBuffer[0]);
m_pMesh->OptimizeInplace(
D3DXMESHOPT_ATTRSORT |
D3DXMESHOPT_COMPACT |
D3DXMESHOPT_VERTEXCACHE,
&adjacencyBuffer[0],
0, 0, 0);
}
void Sprite::render()
{
Render->g_pDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
for (DWORD i = 0; i < m_dwNumMaterials; i++)
{
Render->g_pDevice->SetMaterial(&m_pMeshMaterials[i]);
Render->g_pDevice->SetTexture(0, m_pMeshTextures[i]);
m_pMesh->DrawSubset(i);
}
}
您擁有的頂點越多,GPU 需要花在渲染網格上的時間就越多。 您不能只是無限優化網格以獲得所需的性能。
您可以嘗試用更現代的東西替換當前的網格優化庫。 有來自微軟的 DirectXMesh 庫: https : //github.com/microsoft/DirectXMesh
您可以使用 OptimizeFaces 后跟來自該庫的 OptimizeVertices 並測試它是否會帶來更好的性能。
但是您不應該僅僅通過優化網格來獲得更好的性能。 您應該查看您的渲染代碼是否也可以優化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.