直接X 11锯齿状边缘

时间:2016-03-31 18:23:14

标签: 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无法创建设备。我的GPU没有覆盖任何东西,因为这些设置旨在使用应用程序决定的任何内容。

1 个答案:

答案 0 :(得分:1)

除了为交换链的渲染目标,深度/模板缓冲区启用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课程。

  

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