上一节学完感觉还是有点不过瘾,我们这一节看看还能做出什么更厉害的效果呢?
对于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