|
|

楼主 |
发表于 2007-1-7 11:43:00
|
显示全部楼层
Re:D3DXSPRITE多次begin-end对效率是不是影响很大?
嗯,多谢楼上各位的回复,这点我明白了,现在又有一个问题,假如说我在渲染人物时,人物是由几个Texture给成的(身体,影子,魔法各一个texture),在渲染时,魔法这个texture的RenderState
与身体,影子的不同,但是一次begin-end对中设置的RenderState同一属性只有最后一次设置的有效,这样就好像非得把用两次beign-end对来渲染了,既然多次begin-end对比较影响效率,那有什么别的办法来实现而又不必把一个对象的渲染拆开来做?
g_pSprite->Begin( ...)
//g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
//影子
g_pSprite->Draw(...);
//身体
g_pSprite->Draw(...);
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,src);
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,des);
//魔法
g_pSprite->Draw(...);
g_pSprite->End();
上面的代码会把影子与身体部分的texture也使用AlphaBlend来画,只有下面这样结果才行:
g_pSprite->Begin( ...)
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
//影子
g_pSprite->Draw(...);
//身体
g_pSprite->Draw(...);
g_pSprite->End();
g_pSprite->Begin( ...)
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,src);
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,des);
//魔法
g_pSprite->Draw(...);
g_pSprite->End();
有其它的思路或方法来实现吗?请各位大哥帮忙指教!!! |
|