如何获得我当前的剔除模式,DirectX11

How to get my current culling mode, DirectX11

本文关键字:模式 DirectX11 何获得      更新时间:2023-10-16

我需要知道我当前的剔除模式。我想用一些函数填充D3D11_RASTERIZER_DESC。有可能吗?怎样或者我只能设置状态而不能获取它们?

我没有设置,但我想知道默认设置。

除非先设置,否则无法通过ID3D11DeviceContext::RSGetState获取cull模式,否则将获得null指针。(我在我的代码上测试这个)

让我们再深入一点,

在DirectX 9中,默认的剔除模式是D3DCULL_CW,当我们说剔除时,我们总是指背面剔除,那么什么是背面呢?正面是指按顺时针顺序定义顶点的正面。任何不是正面的脸都是背面。Direct3D并不总是渲染背面;因此,背面被认为是被剔除的。

在DirectX 10中,一个面是正面还是背面取决于您,在D3D10_RASTERIZER_DESC中有一个名为FrontCounterClockwise的文件,其默认值为FALSE,取消选中模式为D3D10_cull_back,与DirectX 9相同。

在DirectX 11中,D3D11_RASTERIZER_DESC的成员与DirectX 10中的成员相同,但遗憾的是,文档没有指定剔除模式的默认值。

我猜DirectX 11在默认情况下也会使用D3D11_CULL_BACK。当您按顺时针顺序定义三角形并对其进行渲染时,一切都很好,但当您将其更改为逆时针方向时,您将看不到任何东西。

编辑:请参阅本页的备注部分,它给出了默认值。感谢MooseBoys指出这一点。

我相信您想了解ID3D11DeviceContext::RSGetState方法。然后,您应该能够从ID3D11RasterizerState输出参数中获得描述。