gpt4 book ai didi

c++ - 如何在 DirectX 10 中绘制大量(500 多个) Sprite 来构建等距平铺 map ?

转载 作者:行者123 更新时间:2023-11-30 03:06:56 25 4
gpt4 key购买 nike

所以,我一直在闲逛几本关于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com