我正在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没有覆盖任何东西,因为这些设置旨在使用应用程序决定的任何内容。
答案 0 :(得分:1)
除了为交换链的渲染目标,深度/模板缓冲区启用MSAA样本计数,并使用相关视图的正确值(D3D11_TEX2DMS_RTV
,D3D11_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。