多重采样抗锯齿(Multisampling Atialiasing)
针对光栅化显示器抗锯齿的方法有多种,在d3d中采用的多重采样方法。即在每个像素点内部,设置多个采样点,绘制多边形边缘时,针对每个采样点判断是否被多边形覆盖,最终的颜色值从采样点中取均值,以对多边形的边缘进行“模糊化",从而减轻锯齿效果。如下图所示,这是一个4重采样的例子,该像素最终的颜色值是多边形本身颜色值的3/4:
支持d3d11的硬件全部支持4重采样,因此我们在后面的程序中将普遍使用4个采样点。在d3d11中通过结构DXGI_SAMPLE_DESC来设置多重采样,其定义如下:
typedef struct DXGI_SAMPLE_DESC {
UINT Count;
UINT Quality;
} DXGI_SAMPLE_DESC, *LPDXGI_SAMPLE_DESC;
Count为我们设置的采样的个数,Quality为机器支持的不同的等级,初始化过程中我们会使用 ID3D11Device::CheckMultisampleQualityLevels 对Quality进行检测。
/**ID3D11Device::CheckMultisampleQualityLevels
* 获取多重采样中可用质量等级
* @param Format 贴图的格式
* @param SampleCount 多重采样的样本数(比如用四重采样,则该参数填4)
* @param pNumQualityLevels 适配器支持的质量等级
*/
HRESULT CheckMultisampleQualityLevels(
DXGI_FORMAT Format,
UINT SampleCount,
UINT *pNumQualityLevels
);
因为支持d3d11的硬件全部支持4重采样,所以返回的多重采样质量等级一定大于0