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

时间:2014-04-10 17:08:34

标签: c++ directx directx-11

我需要知道我目前的剔除模式。我想通过某些功能填充D3D11_RASTERIZER_DESC。可能吗?怎么样?或者我只能设置状态但不能获取状态?

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

2 个答案:

答案 0 :(得分:2)

我相信你想看看ID3D11DeviceContext::RSGetState method。然后,您应该能够从ID3D11RasterizerState输出参数中获取描述。

答案 1 :(得分:0)

你不能通过ID3D11DeviceContext::RSGetState获得剔除模式,除非你先设置它,否则你会得到空指针。(我在我的代码上测试)

让我们再挖一点,

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

在DirectX 10中,无论面部是正面还是背面都取决于您,在D3D10_RASTERIZER_DESC中有一个名为FrontCounterClockwise的文件,它的默认值为FALSE,而deault cull模式为D3D10_CULL_BACK,同样作为DirectX 9。

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

我猜DirectX 11默认也会使用D3D11_CULL_BACK。当你按顺时针顺序定义一个三角形并渲染它时,一切正常,但是当你把它改为逆近时,你什么也看不见。

修改 请参阅this page的备注部分,它会提供默认值。感谢MooseBoys指出这一点。