DirectX 11 渲染到特定区域

Posted

技术标签:

【中文标题】DirectX 11 渲染到特定区域【英文标题】:DirectX 11 render to specific area 【发布时间】:2019-04-16 16:15:11 【问题描述】:

我只是想知道 DirectX 11 是否允许我设置要渲染的区域而不是渲染整个窗口。 非常感谢!

【问题讨论】:

【参考方案1】:

终于搞定了,所以要渲染到你的主窗口应用程序的特定矩形区域。您首先需要创建第二个 childhWnd 让 DirectX 渲染到,然后使用 setParent() 将此 childhWnd 附加到您的主 hWnd 以总共只显示一个窗口。

【讨论】:

【参考方案2】:

是的,使用ID3D11DeviceContext::RSSetViewportsD3D11_VIEWPORT 结构。将TopLeftXTopLeftYWidthHeight 成员设置为部分窗口尺寸将导致渲染目标被绘制到后台缓冲区的该部分。

值得注意的是,如果您针对应用程序的主窗口句柄创建交换链,这不会阻止 DXGI 清除整个应用程序窗口。如果您需要混合 Win32 控件和 Direct3D 内容,请专门为 Direct3D 内容创建一个子窗口,针对该窗口创建一个交换链,并将子窗口添加到主应用程序窗口。

【讨论】:

RSSetViewports 在归一化坐标中设置映射到 (-1,-1) 到 (1,1) 的像素位置,因此这是正确的解决方案。 RSSetScissors 设置用于防止在特定矩形之外绘制的“剪裁”或“剪刀”矩形的像素位置。 DX11 的默认剪刀与视口相同,但您可以通过D3D11_RASTERIZER_DESC.ScissorEnable 状态使用特定的矩形。使用 DX12,您必须在所有情况下使用 RSSetScissorRects 显式设置“剪辑”。 所以你的意思是通过设置剪刀的矩形我可以渲染到特定的矩形区域?

以上是关于DirectX 11 渲染到特定区域的主要内容,如果未能解决你的问题,请参考以下文章

DirectX 12和DirectX 11选哪个,有什么区别

如何从 H.264 NV12 IMFSample 输出渲染到 DirectX11 纹理?

DirectX11第二篇 DirectX11渲染管线(2016.05.09更新)

DirectX11第二篇 DirectX11渲染管线(2016.05.09更新)

DirectX11--HLSL语法入门

使用 DirectX 11 后重置窗口