DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES
原文:DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010333737/article/details/78787555
概述
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渲染6--PIXEL SHADER
原文:DirectX11笔记(十)--Direct3D渲染6--PIXEL SHADER 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u01033 ...
- DirectX11笔记(五)--Direct3D渲染1--VERTICES AND INPUT LAYOUTS
原文:DirectX11笔记(五)--Direct3D渲染1--VERTICES AND INPUT LAYOUTS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.c ...
- DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS
原文:DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0 ...
- DirectX11笔记(八)--Direct3D渲染4--VERTEX SHADER
原文:DirectX11笔记(八)--Direct3D渲染4--VERTEX SHADER 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0103 ...
- DirectX11笔记(七)--Direct3D渲染3--INDICES AND INDEX BUFFERS
原文:DirectX11笔记(七)--Direct3D渲染3--INDICES AND INDEX BUFFERS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- DirectX11笔记(六)--Direct3D渲染2--VERTEX BUFFER
原文:DirectX11笔记(六)--Direct3D渲染2--VERTEX BUFFER 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0103 ...
- DirectX11笔记(三)--Direct3D初始化2
原文:DirectX11笔记(三)--Direct3D初始化2 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737/article/ ...
- DirectX11笔记(二)--Direct3D初始化1之基本概念
原文:DirectX11笔记(二)--Direct3D初始化1之基本概念 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737/art ...
- DirectX11笔记(三)--Direct3D初始化代码
原文:DirectX11笔记(三)--Direct3D初始化代码 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737/article ...
随机推荐
- HBase Region的定位
- 廖雪峰Java9正则表达式-2正则表达式进阶-6搜索和替换
1.使用正则表达式分割字符串: String[] string.split(String regex); "a b c".split("\\s");->[ ...
- Apache SOLR and Carrot2集成
1.环境 下载软件 名称 地址 solr-integration-strategies-gh-pages.zip https://github.com/carrot2/solr-integration ...
- csp-s模拟47 Emotional Flutter,Endless Fantasy题解
题面:https://www.cnblogs.com/Juve/articles/11558523.html A:Emotional Flutter 如果起点确定,那么我们后面走的点都是固定的,及mo ...
- vue.js_06_vue.js的自定义指令和自定义键盘修饰符
1.全局的自定义指令 实现:当页面刷新时,光标聚焦到搜索框中 <label> 搜索: <input type="text" class="form-co ...
- 19-10-18-Y
ZJ一下: 感觉能拿到的分都拿到了,至于后来改题就缶了 其实是:太tui导致没改好 TJ: T1: 正解是$\mathsf{KMP}$,但是广大群众都用了$\mathsf{hash}$…… 发现了一个 ...
- spring cloud深入学习(十一)-----服务网关zuul
前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服务集群配置中心,似乎一个 ...
- 移动相关的css
1.首先认识第一个apple-mobile-web-app-capable 删除默认的苹果工具栏和菜单栏. <meta name="apple-mobile-web-app-capab ...
- 解决hive无法传参问题思路
由于hive执行过程中参数必须写死,无法进行传递参数.利用shell脚本和java编程进行解决 #!/bin/sh#date = `date -d -1days '+%Y-%m-%d'`if [ $# ...
- java普通for循环和for-each迭代循环的区别
PO实体类User: package aA; public class User { private String name; private int many; private int id; pu ...