DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES
来源:互联网 发布:安卓java游戏大全 编辑:程序博客网 时间:2024/06/08 10:48
- 概述
- ID3D11RasterizerState
- D3D11_RASTERIZER_DESC
- 设置渲染状态
概述
Direct3D 本质上是一个状态机, 所有的东西在我们手动改变之前都会始终保持在当前的状态, 比如之前提到的 input layout, vertex buffer 以及 index buffer 都是这样. Direct3D 提供了一些接口来封装用于配置 Direct3D 某些相关功能的属性.
- ID3D11RasterizerState
- ID3D11BlendState
- ID3D11BlendState
后两个默认关闭, 我们暂时也无需使用, 所以先不做说明.
ID3D11RasterizerState
这个接口用来配置渲染管线的光栅化阶段. 我们可以使用下面的方法来创建一个 ID3D11RasterizerState.
HRESULT ID3D11Device::CreateRasterizerState( const D3D11_RASTERIZER_DESC *pRasterizerDesc, ID3D11RasterizerState **ppRasterizerState);
第一个参数是对应的描述, 第二个参数是出参, 返回创建的 ID3D11RasterizerState.
D3D11_RASTERIZER_DESC
typedef struct D3D11_RASTERIZER_DESC { D3D11_FILL_MODE FillMode; // Default: D3D11_FILL_SOLID D3D11_CULL_MODE CullMode; // Default: D3D11_CULL_BACK BOOL FrontCounterClockwise; // Default: false INT DepthBias; // Default: 0 FLOAT DepthBiasClamp; // Default: 0.0f FLOAT SlopeScaledDepthBias; // Default: 0.0f BOOL DepthClipEnable; // Default: true BOOL ScissorEnable; // Default: false BOOL MultisampleEnable; // Default: false BOOL AntialiasedLineEnable; // Default: false} D3D11_RASTERIZER_DESC;
这里大多数属性是高级用法或者很少使用, 我们这里重点说明前三个属性.
FillMode: 决定光栅化时是使用网格模式( D3D11_FILL_WIREFRAME )还是正常的填充( D3D11_FILL_SOLID )
CullMode: 决定剔除背面( D3D11_CULL_BACK )还是剔除正面( D3D11_CULL_FRONT )或者不进行剔除( D3D11_CULL_NONE )
FrontCounterClockwise: 决定当三角形画到 render target 的时候, 顶点为顺时针时表示三角形的正面还是反面.
设置渲染状态
在得到 ID3D11RasterizerState 之后, 我们可以通过 RSSetState 方法来把 ID3D11RasterizerState 设置给 D3D.
D3D11_RASTERIZER_DESC rsDesc;ZeroMemory(&rsDesc, sizeof(D3D11_RASTERIZER_DESC));rsDesc.FillMode = D3D11_FILL_SOLID;rsDesc.CullMode = D3D11_CULL_NONE;rsDesc.FrontCounterClockwise = false;// 注意使用 ZeroMemory 时不为 0 或 false 的值需要重新设置.rsDesc.DepthClipEnable = true;HR(md3dDevice->CreateRasterizerState(&rsDesc, &mNoCullRS));
另外, 通过传 0 给 RSSetState 方法可以重置所有状态.
一般情况下, 程序都不需要再运行时创建新的状态集合, 所以程序可以在初始化阶段创建必要的渲染状态集合, 而且这些状态集合不应该被修改, 他们可以被设置为只读的属性. 比如将所有的渲染集合对象放到一个静态类里, 这样这些集合既不需要创建多份, 数据又可以被共享.
- DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES
- DirectX11笔记(十二)--Direct3D渲染8--EFFECTS
- DirectX11笔记(五)--Direct3D渲染1--VERTICES AND INPUT LAYOUTS
- DirectX11笔记(六)--Direct3D渲染2--VERTEX BUFFER
- DirectX11笔记(七)--Direct3D渲染3--INDICES AND INDEX BUFFERS
- DirectX11笔记(八)--Direct3D渲染4--VERTEX SHADER
- DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS
- DirectX11笔记(十)--Direct3D渲染6--PIXEL SHADER
- DirectX11笔记(三)--Direct3D初始化2
- DirectX11笔记(三)--Direct3D初始化代码
- DirectX11笔记(四)--渲染管线
- Direct3D学习笔记:渲染管线
- DirectX11学习笔记(4) 文本的渲染
- C++Directx11开发笔记二:Direct3D基础设备的初始化
- DirectX11笔记(二)--Direct3D初始化1之基本概念
- DirectX11 Direct3D基本概念
- DirectX11 Direct3D初始化
- DirectX11 调试Direct3D应用程序
- 互联网并发编程之一 线程安全03线程中的脏读
- Fatal error in launcher: Unable to create process using 错误解决 以及python3安装scrapy
- 教学评估?别烦,看这!
- 亚马逊高级应用科学家熊元骏:人类行为理解研究进展 | 直播实录·PhD Talk
- C语言发展史
- DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES
- 小程序12.12
- 学习笔记七-AuthenticationProvider
- 谷歌网的一些伦理风险行为收集
- 如何选择使用String、StringBuffer与StringBuilder
- Linux 文件权限
- java 代理模式
- C++ 变量作用域
- 优秀程序员都会关注的公众号