c++ - Direct X 11 锯齿状边缘

标签 c++ directx-11 multisampling

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

最佳答案

除了为交换链的渲染目标、深度/模板缓冲区启用 MSAA 样本计数,并为相关 View 使用正确的值(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);

参见 Simple rendering DirectX Tool Kit 类(class)以获取更详细的示例。

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.

关于c++ - Direct X 11 锯齿状边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36340910/

相关文章:

c++ - VS2015 中的 D3D11.h

c++ - 在 DirectX 中创建和使用纹理

java - JOGL FBObject 多重采样

c++ - boost - 添加到 'corecrt.h' 的路径

c++ - 如何混合 OpenCV 1.0 和 OpenCV 2.0

c++ - 重写 push_back C++

c++ - 在模板类中使用 vector 迭代器

c++ - DirectX 11 访问冲突

opengl - 来自 FBO 的 glReadPixels 因多重采样而失败

opengl - 如何将多重采样深度缓冲区解析为深度纹理?