教程地址
学习记录
这篇文章中主要介绍在 DX 中对于 2D 的渲染,这篇内容其实不多,也没啥营养。本来不想写的,但是因为之后要进行字体渲染什么的,干脆在之前把这个先写了吧。
在 2D 坐标系中,我们只有 x,y 概念而没有 z 轴,所以在此之前我们需要关闭 z 轴,即禁用深度缓冲。禁用之后我们的绘制将会以画家算法为准,先绘制的物体会被后绘制的遮挡。首先使用深度模板缓冲,将是否启用设置为 false
。
1 | D3D11_DEPTH_STENCIL_DESC ddDisableStencilopDesc; |
这个和 3D 中的是一样的,如果我们需要 3D 的缓冲可以直接将 false
改为 true
。接着在立即上下文对象中设置它:
1 | pImmediateContext->OMSetDepthStencilState(pDisableDepthStencilState, 1); |
现在来创建深度模板测试视图并启用:
1 | D3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc; |
除了对 Z 的禁用之外,我们需要使用正交投影矩阵来代替 3D 的投影矩阵,创建出新的坐标系统矩阵:
1 | MatrixXD matrix2d = { |
在使用了正交投影后,我们对我们的举行坐标进行修改,现在他们的范围与屏幕大小有关,且原点在屏幕中央。现在我们将矩形设置为中心在原点边长为200的一个正方形:
1 | Vertex vertices[] = |
其他基本一致,现在编译运行程序我们应该可以看到一个 200 * 200 的图片: