Direct X 11 锯齿状边缘

Direct X 11 jagged edges

我正在 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 没有覆盖任何内容,因为设置旨在使用应用程序决定的任何内容。

除了为交换链的渲染目标、您的 depth/stencil 缓冲区启用 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 工具包 Simple rendering 课程。

With Direct3D Feature Level 10.1 or greater hardware will support 4x MSAA. Direct3D Feature Level 11.0 or greater hardware will support 4x and 8x MSAA. Everything should support 2x MSAA.