Full-Scene сглаживание (Direct3D 9)
Полное сглаживание сцены означает размытие краев каждого многоугольника в сцене, так как он растеризован за один проход; второй проход не требуется. Полная сглаживание сцены, если это поддерживается, влияет только на треугольники и группы треугольников. Линии нельзя сглаживать с помощью служб Direct3D. Полное сглаживание сцены выполняется в Direct3D с помощью мультисаймплинга для каждого пикселя. Если включена многомерная выборка, все подвымеры пикселя обновляются за один проход, но при использовании для других эффектов, включающих несколько проходов отрисовки, приложение может указать, что данный проход отрисовки должен повлиять только на некоторые вложенные выборки. Этот последний подход позволяет моделировать размытие движения, эффекты фокуса глубины поля, размытие отражения и т. д.
В обоих случаях различные образцы, записанные для каждого пикселя, объединяются и выводятся на экран. Это позволяет улучшить качество изображения при сглаживания или других эффектах.
Перед созданием устройства с помощью метода IDirect3D9::CreateDevice необходимо определить, поддерживается ли полное сглаживание сцены. Для этого вызовите метод IDirect3D9::CheckDeviceMultiSampleType , как показано в примере кода ниже.
/*
* The code below assumes that pD3D is a valid pointer
* to a IDirect3D9 interface.
*/
if( SUCCEEDED(pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL , D3DFMT_R8G8B8, FALSE,
D3DMULTISAMPLE_2_SAMPLES, NULL ) ) )
// Full-scene antialiasing is supported. Enable it here.
Первый параметр, который принимает IDirect3D9::CheckDeviceMultiSampleType , — порядковый номер, обозначающий адаптер отображения для запроса. В этом примере используется D3DADAPTER_DEFAULT для указания основного видеоадаптера. Второй параметр — это значение из перечисленного типа D3DDEVTYPE , указывающее тип устройства. Третий параметр задает формат поверхности. Четвертый параметр указывает Direct3D, следует ли узнать о многоэконкционной выборке (TRUE) или сглаживание полной сцены (FALSE). В этом примере используется значение FALSE , чтобы сообщить Direct3D, что он запрашивает полное сглаживание сцены. Последний параметр указывает метод множественной выборки, который требуется протестировать. Используйте значение из перечисленного типа D3DMULTISAMPLE_TYPE . Этот пример проверяет, поддерживаются ли два уровня множественной выборки.
Если устройство поддерживает уровень мультисамплинга, который вы хотите использовать, следующим шагом является настройка параметров презентации путем заполнения соответствующих элементов структуры D3DPRESENT_PARAMETERS для создания поверхности отрисовки с несколькими выборками. После этого можно создать устройство. В примере кода ниже показано, как настроить устройство с поверхностью отрисовки с несколькими выборками.
/*
* The example below assumes that pD3D is a valid pointer
* to a IDirect3D9 interface, d3dDevice is a pointer to a
* IDirect3DDevice9 interface, and hWnd is a valid handle
* to a window.
*/
D3DPRESENT_PARAMETER d3dPP
ZeroMemory( &d3dPP, sizeof( d3dPP ) );
d3dPP.Windowed = FALSE
d3dPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dPP.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES;
pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &d3dDevice)
Чтобы использовать многомерную выборку, элементу SwapEffect D3DPRESENT_PARAMETER необходимо задать значение D3DSWAPEFFECT_DISCARD.
Последний шаг — включить сглаживание с несколькими выборками, вызвав метод IDirect3Ddevice9::SetRenderState и задав для D3DRS_MULTISAMPLEANTIALIAS значение TRUE. После присвоения этому значению значения TRUE к любой отрисовке будет применена многомерная выборка. В зависимости от того, что вы отрисовываете, может потребоваться включить и отключить многомерную выборку.
Связанные темы