【DirectX11】【学习笔记(8)】渲染状态

上一节学完感觉还是有点不过瘾,我们这一节看看还能做出什么更厉害的效果呢?

对于D3D来说,如果我们不去更改绑定缓冲,渲染状态,它将一直维持在原来的状态,比如上一节提到的绘制两个正方体时,我们就需要更新变换矩阵。

我们能修改的渲染状态有以下三个:

ID3D11RasterizerState - 这个接口是用来修改光栅化阶段的

ID3D11BlendState - 这个是用来做OM阶段的色彩融合的

ID3D11DepthStencilState - 这个接口是用来确定深度和模板缓冲的。深度缓冲我们之前已经了解过一点了,这节讨论模板缓冲

Global Declarations

首先申明一个接口来设置RS阶段:

ID3D11RasterizerState* WireFrame;

Clean Up

WireFrame->Release();

Describing the Render State

和其他所有的对象一样,我们要先申明一个描述结构体

typedef struct D3D11_RASTERIZER_DESC {
  D3D11_FILL_MODE FillMode;
  D3D11_CULL_MODE CullMode;
  BOOL            FrontCounterClockwise;
  INT             DepthBias;
  FLOAT           DepthBiasClamp;
  FLOAT           SlopeScaledDepthBias;
  BOOL            DepthClipEnable;
  BOOL            ScissorEnable;
  BOOL            MultisampleEnable;
  BOOL            AntialiasedLineEnable;
} D3D11_RASTERIZER_DESC;

FillMode - 填充模式我们可以只可以放置两个参数中的一个D3D11_FILL_WIREFRAME/D3D11_FILL_SOLID。一个只能渲染线框,另一个可以填满面

CullMode - 裁剪模式,我们可以设置D3D11_CULL_NONE 来取消裁剪或者我们可以设置D3D10_CULL_FRONT /BACK来裁剪前后面。(顺时针绘制的面为前面,如果用了背面裁剪,对于一个正方体,我们就不能看到它的背面了)

FrontCounterClockwise - true or false 。true是说三角形是顺时针渲染,否则逆时针

DepthBias - 每个像素要添加的深度值,

通过在每个空间中添加z偏置(或深度偏差),可以使得在3D空间中共面的多边形看起来好像它们不共面。

这是一种常用于确保正确显示场景中阴影的技术。 例如,墙上的阴影可能具有与墙相同的深度值。 如果应用程序首先渲染墙,然后渲染阴影,则阴影可能不可见.

应用程序可以通过将偏差(来自D3D11_RASTERIZER_DESC1的DepthBias成员)添加到系统在渲染共面多边形集时使用的z值来帮助确保正确渲染共面多边形。 具有较大z值的多边形将在具有较小z值的多边形前面绘制。这样墙上的阴影就被绘制出来了

DepthBiasClamp - 每个像素最大的深度偏移

SlopeScaledDepthBias - 指定每个像素的斜率

DepthClipEnable - 是否启用基于摄像机距离的裁剪

ScissorEnable - 是否启用矩形裁剪,在矩形之外的像素将被裁剪

MultisampleEnable - 是否启用多重采样抗锯齿

AntialiasedLineEnable - 是否启用线性抗锯齿,这个选项只有alpha blending启用,画线段并且多重采样关闭的时候才能用

Filling out the D3D11_RASTERIZER_DESC Structure

本来想把英文都翻译成中文的,但是感觉描述不太贴切,所以以后标题一般都不翻译了。。。。。

ZeroMemory(&wfdesc, sizeof(D3D11_RASTERIZER_DESC));
wfdesc.FillMode = D3D11_FILL_WIREFRAME;
wfdesc.CullMode = D3D11_CULL_NONE;
hr = d3d11Device->CreateRasterizerState(&wfdesc, &WireFrame);

Set the Render State

创建好之后,我们就把对象绑定到管线上

d3d11DevCon->RSSetState(WireFrame);

完成了上述这些步骤,我们就能看到上一节绘制的两个三角形都被以线框的形式画出来拉!

本节内容就到这里拉。

本节内容代码可以在我的Github找到,Github传送门

游戏开发路途遥远,但我相信只要坚持,总能到达彼岸!

如果我的文章对于你学习DirectX11有点帮助,欢迎评论给出建议,让我们一起学习进步!

今天周末,又是忙碌的一周,告诉自己要加油鸭!

                                                                                               ———————— 小明 2018.12.2 16.01

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值