6

我正在学习 directx 11 并尝试设置多重采样。出于某种原因,互联网上的每个教程都禁用了多重采样,并且从不讨论如何启用它。

首先:我四处搜索,找不到任何如何使用CheckMultisampleQualityLevels. 似乎您需要创建一个设备,调用该函数,找出可用级别,然后销毁该设备并使用您想要的设置创建一个新设备。这是正确的方法吗?或者,还有更好的方法?

其次,如何启用多重采样?因为我不确定如何开始CheckMultisampleQualityLevels工作,所以我尝试为DXGI_SWAP_CHAIN_DESC.SampleDesc.Countand输入一些值DXGI_SWAP_CHAIN_DESC.SampleDesc.Quality(比如 4 和 4),当它运行时,什么都没有显示(如果我输入像 33 和 2 这样的疯狂值,它会出错)。除了交换链描述之外,这是否需要设置在其他地方,或者着色器是否会以某种方式干扰它(我设置了基本的灯光和纹理着色器)?

我有一台 GTX 570,所以我知道它可以支持大多数 AA 设置。我正在关注这组教程,以防有任何帮助:http ://rastertek.com/tutindex.html

4

3 回答 3

7

1.调用 ID3D11Device ::CheckMultisampleQualityLevels,它为您提供适配器支持的质量级别。

2.在填写DXGI_SWAP_CHAIN_DESC时,设置SampleDesc.Count和SampleDesc.Quality。

3.如果使用多样本抗锯齿,所有绑定的渲染目标和深度缓冲区必须具有相同的样本计数和质量级别。(DXGI_SAMPLE_DESC 结构

根据关于 D3D11_RASTERIZER_DESC(D3D11_RASTERIZER_DESC 结构)的 msdn 文档,API 功能级别 10.1 及更高版本,MultisampleEnable 对 MSAA 方面的点和三角形没有影响,仅影响线渲染算法的选择。

您应该查看 msdn 以了解更多详细信息。

于 2012-12-31T02:54:17.620 回答
2

这对我有帮助:

  • 深度缓冲区必须具有相同的样本计数和质量级别
  • depthStencilViewDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMS;

谢谢@Telanor 和@user1253930

于 2013-04-18T15:29:19.690 回答
1

您应该尝试设置MultisampleEnable D3D11_RASTERIZER_DESC

还将质量设置为 1。

至于 CheckmultisampleQuality,您只需设置要创建的 DXGI 格式。您想要的样本数。最后传入一个指向 uint 的指针,它将返回可供您使用的质量级别的数量。如果它返回 0,则不支持多重采样,否则您知道可以设置什么质量级别。

于 2011-03-16T19:49:27.887 回答