DirectX(八)

Render to Texture

RTT(Render to Texture):渲染到纹理。普通的图形渲染流程中,最终结果是渲染到帧缓存中,最后显示到屏幕上,然后可以把纹理继续应用到场景绘制中,比如渲染一个场景A到纹理中,在另一个场景B的一个电视屏幕上把刚才的纹理贴上去,就像是在播放A一样,再比如各种镜子中的景象也是一样道理。

1 创建一张Texture2D 存储生成的图像,并绑定D3D11_BIND_SHADER_RESOURCE 作为Shader纹理资源
还有D3D11_BIND_RENDER_TARGET ,绑定为渲染目标视图。

    D3D11_TEXTURE2D_DESC texDesc;
    texDesc.Width = D3d->GetWidth();
    texDesc.Height = D3d->GetHeight();
    texDesc.MipLevels = 1;
    texDesc.ArraySize = 1;
    texDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    texDesc.SampleDesc.Count = 1;
    texDesc.SampleDesc.Quality = 0;
    texDesc.Usage = D3D11_USAGE_DEFAULT;
    texDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET | D3D11_BIND_UNORDERED_ACCESS;
    texDesc.CPUAccessFlags = 0;
    texDesc.MiscFlags = 0;

    ID3D11Texture2D* offscreenTex = nullptr;
    HR(D3d->GetDevice()->CreateTexture2D(&texDesc, 0, &offscreenTex));
    HR(D3d->GetDevice()->CreateRenderTargetView(offscreenTex, nullptr, &OffscreenRTV));
    HR(D3d->GetDevice()->CreateShaderResourceView(offscreenTex, nullptr, &OffscreenSRV));
    ReleaseCOM(offscreenTex);

2 设置Context的目标视图为刚才创建的OffscreenRTV目标视图, Context->OMSetRenderTargets(1, &OffscreenRTV, m_pDepthStencilView);然后绘制的图形将保存在刚才创建的纹理中,而不是后台缓存中。

利用RTT生成的画中画
这里写图片描述
项目Github地址https://github.com/xinhua302/Graphics-Engine

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值