参考教程
Tutorial 22: Render to Texture
学习记录
在 OpenGL 中我们介绍过帧缓冲:【OpenGL】17-帧缓冲与离屏渲染 ,这篇文章中我们主要介绍在 DX11 中实现离屏渲染。
这篇文章的内容比较简单,我们会首先渲染一张长宽为 200 的纹理,然后使用这张纹理来为我们的立方体贴图。
首先我们需要创建新的贴图,以及相应视图:
1 | HRESULT InitTextureResourceView( |
之后,我们在 main
方法里创建不同的 viewport
,分别用于渲染纹理和渲染屏幕:
1 | D3D11_VIEWPORT dv1; |
声明并初始化我们的纹理及其资源等(调用刚才的方法):
1 | ID3D11ShaderResourceView *pShaderResourceViewT[nNumCubeTex]; |
此时,我们为要渲染的纹理创建一个新的投影矩阵(因为直接用之前的有点丑。。。),如下:
1 | const MatrixXD matrixTex = { |
如果你要渲染静态的二维目标,可以使用正交矩阵并且在帧循环前就可以绘制完毕,如果你的纹理是动态的,那么就要在每一帧里运行了。
我们在主循环里加入每一帧的清空以及对应渲染:
1 | pD3DImmediateContext->ClearRenderTargetView(pD3DRenderTargetView, backgroundColor1); // black |
这一大段代码需要注意的地方也就是我注释出来的部分,可以看到我们首先为纹理渲染,然后用这张纹理去贴图我们的立方体,同时我们为两个渲染目标使用了不同的背景颜色来重置。
最终效果如下: