消除渲染图形边缘锯齿是很有效的优化手段。

MultiSampleType 注意点

d3dpp.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES; //4倍多重采样
  1. D3DMULTISAMPLE_NONE 表示禁止多重采样,不进行抗锯齿处理。
  2. 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
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐