DirectX 11 渲染到特定区域

4

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

2个回答

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

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


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

0

终于搞定了,要在您的主窗口应用程序中呈现到特定矩形区域,您首先需要创建第二个子窗口以让DirectX进行渲染,然后使用setParent()将此子窗口附加到您的主hWnd上,以仅显示一个窗口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接