如何获得我当前的剔除模式,DirectX11
How to get my current culling mode, DirectX11
我需要知道我当前的剔除模式。我想用一些函数填充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输出参数中获得描述。
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 为什么在保护模式下继承升级不起作用
- 如何在全屏模式下(在OpenGL中)使背景透明
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 此模式的C++RegEx
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 使用可变模板的Broadcaster/Listener模式
- c++方法参数只能在linux的发布模式下自行更改
- 资源管理设计模式
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 小字符串优化(调试与发布模式)
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- 如何设计具有不同类型的通知和观察器的观察者模式?
- 在C++的一系列数字中查找重复模式
- 是否允许使用带有"w+"模式的 freopen 进行标准设置?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 在 directx11 代码中更改全屏模式下的刷新率不起作用
- 如何获得我当前的剔除模式,DirectX11