直接X 11锯齿状边缘

Direct X 11 jagged edges

本文关键字:边缘 锯齿状 直接      更新时间:2023-10-16

我正在Direct X 11中创建一个小型游戏引擎,它非常棒,但我注意到渲染时,3D对象和2D对象的边缘看起来都很粗糙。我以前来自Direct X 9,这个问题在那里并不存在。我想知道如何正确地启用抗锯齿或某种多重采样,这样我的纹理就不会出现锯齿状边缘。

swapChainDesc.SampleDesc.Count = 2;
swapChainDesc.SampleDesc.Quality = 0;
depthBufferDesc.SampleDesc.Count = 2;
depthBufferDesc.SampleDesc.Quality = 0;

这些是计数和质量的组合,但无论这里的设置如何,都没有视觉差异,否则Direct3D将无法创建设备。我的GPU不会覆盖任何内容,因为设置是为使用应用程序决定的任何内容而设计的。

除了为交换链的渲染目标、深度/模具缓冲区启用MSAA采样计数,并为相关视图(D3D11_TEX2DMS_RTVD3D11_DSV_DIMENSION_TEXTURE2DMS)使用正确的值外,您还需要在光栅化器状态中将D3D11_RASTERIZER_DESC.MultisampleEnable实际设置为TRUE:

CD3D11_RASTERIZER_DESC rastDesc(D3D11_FILL_SOLID, D3D11_CULL_NONE, FALSE,
    D3D11_DEFAULT_DEPTH_BIAS, D3D11_DEFAULT_DEPTH_BIAS_CLAMP,
    D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS, TRUE, FALSE,
    TRUE /*this is MSAA enable*/, FALSE);

有关更详细的示例,请参见DirectX工具包的"简单渲染"课程。

使用Direct3D功能级别10.1或更高版本,硬件将支持4个MSAA。Direct3D Feature Level 11.0或更高版本的硬件将支持4倍和8倍MSAA。一切都应支持2倍MSAA。

您可以调用ResolveSubresource来应用MSAA过滤

例如:pDeviceContext->ResolveSubresource(DstText,0,MultisampledTexture,0,Multi-sampledTexture.Format);

DstTexture经过过滤,应该减少或消除楼梯视觉失真。