gpt4 book ai didi

c++ - C++ 中的 DirectX 10 HUD

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:06 25 4
gpt4 key购买 nike

我正在尝试在 DirectX 10 中制作自定义 HUD 系统。我目前的攻击方法是简单地使用网格树来表示不同级别的菜单。

我相信,通过禁用深度测试,我可以制作一个网格,该网格粘贴在背景中其余 3d 世界的上方。为此,我尝试使用 D3D10_DEPTH_STENCIL_DESC,并将 DepthEnable 选项设置为 false。然后,我将此 D3D10_DEPTH_STENCIL_DESC 绑定(bind)到模板状态,然后在绘制网格之前将其激活。到目前为止,这给我留下了一个缺失的网格。

我的问题实际上可以归结为:我是否在正确的轨道上,或者我是否需要重新考虑这个问题?此外,如果这是解决此问题的好计划,是否有任何我忘记考虑的事情?

下面是我尝试获取此 HUD 的代码位

创建 D3D10_DEPTH_STENCIL_DESC:

    //HUD Elements
D3D10_DEPTH_STENCIL_DESC dsDesc;
//Depth Settings
dsDesc.DepthEnable = false;
dsDesc.DepthWriteMask = D3D10_DEPTH_WRITE_MASK_ALL;
dsDesc.DepthFunc = D3D10_COMPARISON_LESS;
//Stencil settings
dsDesc.StencilEnable = true;
dsDesc.StencilReadMask = 0xff;
dsDesc.StencilWriteMask = 0xff;
//Always pass the stencil test, and replace the current stencil value with
// the stencil reference value 1
dsDesc.FrontFace.StencilFailOp = D3D10_STENCIL_OP_KEEP;
dsDesc.FrontFace.StencilDepthFailOp = D3D10_STENCIL_OP_KEEP;
dsDesc.FrontFace.StencilPassOp = D3D10_STENCIL_OP_REPLACE;
dsDesc.FrontFace.StencilFunc = D3D10_COMPARISON_ALWAYS;
// We are not rendering backfacing polygons, so these settings do not matter.
dsDesc.BackFace.StencilFailOp = D3D10_STENCIL_OP_KEEP;
dsDesc.BackFace.StencilDepthFailOp = D3D10_STENCIL_OP_KEEP;
dsDesc.BackFace.StencilPassOp = D3D10_STENCIL_OP_REPLACE;
dsDesc.BackFace.StencilFunc = D3D10_COMPARISON_ALWAYS;
//Bind HUD to a stencil
HR(md3dDevice->CreateDepthStencilState(&dsDesc,&hud));

要画画,我只需要做:

    md3dDevice->OMSetDepthStencilState(hud, 1);
menu.draw(mVP);

最佳答案

是的,您找对了树。但要记住的一点是,如果您的菜单系统是分层的,那么您必须从后退到前面,因为 Z 缓冲区无法帮助您。这将意味着相当多的 overdraw 。

另一种解决方案允许您通过使用 Z 缓冲区(尤其是使用早期的 Z 拒绝硬件支持)并从前到后绘制来限制 overdraw 量。但是,您会遇到它与您的场景交互的问题。只需在呈现菜单之前清除 Z-Buffer 即可轻松解决此问题。

TBH 尽管您最好使用 Z-Buffer 清除方法,因为这意味着您可以更有效地批处理绘制调用。即不断映射和填充 ID3D10Buffer 将比执行一次然后不断重新绘制它要慢。当然,当状态发生变化时,您可能需要编辑缓冲区,但您可以限制编辑的缓冲区数量,并且当没有状态变化时,您不会不必要地消耗 CPU。

关于c++ - C++ 中的 DirectX 10 HUD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151497/

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