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);
elseg_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