|
请大家帮帮忙,谢谢了!
我想用DrawIndexedPrimitive来代替DrawSubset,而且并没有进行mesh的优化,但用DrawIndexedPrimitive后,帧率从100下降到了20!!用DrawSubset时并没有进行mesh的优化,所以按理说DrawIndexedPrimitive来代替DrawSubset的速度应该是一样的啊!
g_pMesh->LockAttributeBuffer(3,(DWORD**)&Attribute); //锁定属性缓冲
copyattribute=Attribute;
for( DWORD i=0; i<g_dwNumMaterials; i++ )//g_dwNumMaterials对所有三角形按照属性值进行分类设置其渲染属性
{
g_pD3DDevice->SetMaterial( &g_pMeshMaterials );
g_pD3DDevice->SetTexture( 0, g_pMeshTextures );
//g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, n);//直接用顶点缓冲来渲染
for(DWORD j=0; j<fn; j++)//fn网格的面数,在属性缓冲中遍历所有三角形面片的属性值
{
// N=j;//记录第几个三角形
if((*Attribute)==i)//就是如果此三角形的属性是i那么就渲染它,就是每次循环找出所有相同属性的三角形
g_pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,n,j*3,1);//DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,fn*3,0,fn);用网格的索引缓冲来渲染DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,n,N*3,1)
Attribute++;//属性数组指针指向下一个三角形的属性
}
Attribute=copyattribute;//每次循环要从属性数组的起始地址开始*/
// g_pMesh->DrawSubset( i);
}
g_pMesh->UnlockAttributeBuffer();//解锁属性缓冲
|
|