C++DirectX9坐标系与基本图元之抗锯齿(AntiAliasing)_0305
·
消除渲染图形边缘锯齿是很有效的优化手段。
MultiSampleType 注意点
d3dpp.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES; //4倍多重采样
- D3DMULTISAMPLE_NONE 表示禁止多重采样,不进行抗锯齿处理。
- D3DMULTISAMPLE_2-16_SAMPLES 表示2-16不同的倍数级别,倍数越高效果越好,也更耗费资源。
还需要设置 SwapEffect 为 D3DSWAPEFFECT_DISCARD
检查设备是否支持 多重采样
//创建Direct3D设备对象
if (FAILED(g_pD3D->CheckDeviceMultiSampleType(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, FALSE, D3DMULTISAMPLE_4_SAMPLES, NULL)))
{
MessageBox(hWnd, L"硬件不支持多采样反锯齿!\n采用参考设备!", L"AntiAlisa", 0);
hr = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice);
}
else
{
hr = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice);
}
渲染时,设置使用图形反锯齿
//设置是否启用图形反锯齿
if (antiAlisa)
g_pd3dDevice->SetRenderState(D3DRS_MULTISAMPLEANTIALIAS, TRUE);
else
g_pd3dDevice->SetRenderState(D3DRS_MULTISAMPLEANTIALIAS, FALSE);
效果
可以通过鼠标左键切换是否启用反锯齿渲染状态,但是,实际上看不到很明显的结果,放大窗口也看不出来,可能边缘会有一些模糊。

git仓库
https://github.com/kesshei/direct9Demo/tree/main/03_%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%9D%90%E6%A0%87%E7%B3%BB%E4%B8%8E%E5%9F%BA%E6%9C%AC%E5%9B%BE%E5%85%83/05_AntiAlisa
https://gitee.com/kesshei/direct9Demo/tree/main/03_%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%9D%90%E6%A0%87%E7%B3%BB%E4%B8%8E%E5%9F%BA%E6%9C%AC%E5%9B%BE%E5%85%83/05_AntiAlisa
更多推荐


所有评论(0)