作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我一直在闲逛几本关于 DirectX 的书(特别是 10 本),并且正在尝试构建一个使用它的游戏,但我被一个似乎没有一本书提到的问题难住了:我正在构建一个带有 Sprite 的等距 map ,随着棋盘变大,程序速度会急剧下降。每个图 block 都是 64x45,当我用 Sprite 构建一个 36x19 (684) 图 block map 时,我的应用程序加载大约需要 6 秒,每帧之间大约需要 5 秒。由于使用断点进行调试没有产生任何好的线索,我已经缩小了当前代码中问题出在这个特定部分的范围:
如有任何帮助,我们将不胜感激。
const FLOAT clearcolor[4] = {0.0f, 0.0f, 0.0f, 0.0f};
pD3DDevice->ClearRenderTargetView(pRenderTargetView, clearcolor);
if(spriteObject != NULL){
spriteObject->Begin(D3DX10_SPRITE_SORT_TEXTURE);
pD3DDevice->OMGetBlendState(&pOriginalBlendState10, OriginalBlendFactor, &OriginalSampleMask);
if(pBlendState10)
{
FLOAT NewBlendFactor[4] = {0,0,0,0};
pD3DDevice->OMSetBlendState(pBlendState10, NewBlendFactor,0xffffffff);
}
D3DXMatrixScaling(&matScale, 64, 45, 1.0f);
for(int y = 0;y < 36;y++){
px=0;
if(y % 2 == 1)
px-=32;
for(int x = 0;x < 19;x++){
D3DXMatrixTranslation(&matTrans, px, viewport.Height - py, 0.1f);
testTile.matWorld = (matScale * matTrans);
spriteObject->DrawSpritesImmediate(&testTile, 1, 0, 0);
px+=64;
}
py+=23;
}
spriteObject->End();
pD3DDevice->OMSetBlendState(pOriginalBlendState10, OriginalBlendFactor, OriginalSampleMask);
最佳答案
DrawSpritesImmediate 的全部要点在于您希望使用包含数百或数千个 Sprite 的数组来调用它……而不是一次一个 Sprite 。
或者,尝试将“立即”调用更改为使用 DrawSpritesBuffered,然后是 ID3DX10Sprite::Flush(在循环外,就在 End() 之前)。
但即便如此...5 秒/帧听起来非常慢...您确定您没有使用软件“引用光栅化器”而不是硬件吗?
关于c++ - 如何在 DirectX 10 中绘制大量(500 多个) Sprite 来构建等距平铺 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6173187/
我是一名优秀的程序员,十分优秀!