Full-Scene suavizado de contorno (Direct3D 9)

El suavizado de contorno de escena completa se refiere a desenfocar los bordes de cada polígono de la escena, ya que se rasteriza en un solo paso; no se requiere ningún segundo pase. El suavizado de contorno de escena completa, cuando se admite, afecta solo a triángulos y grupos de triángulos. Las líneas no se pueden suavizar mediante el uso de servicios direct3D. El suavizado de contorno de escena completa se realiza en Direct3D mediante el muestreo múltiple en cada píxel. Cuando se habilita el muestreo múltiple, todos los submuestreos de un píxel se actualizan en un paso, pero cuando se usan para otros efectos que implican varios pasos de representación, la aplicación puede especificar que solo algunos submuestreos se vean afectados por un paso de representación determinado. Este último enfoque permite la simulación de desenfoque de movimiento, efectos de foco de profundidad de campo, desenfoque de reflexión, etc.

En ambos casos, las distintas muestras grabadas para cada píxel se combinan y se generan en la pantalla. Esto permite mejorar la calidad de la imagen de suavizado de contorno u otros efectos.

Antes de crear un dispositivo con el método IDirect3D9::CreateDevice , debe determinar si se admite el suavizado de contorno de escena completa. Para ello, llame al método IDirect3D9::CheckDeviceMultiSampleType como se muestra en el ejemplo de código siguiente.

/*
* 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.

El primer parámetro que IDirect3D9::CheckDeviceMultiSampleType acepta es un número ordinal que denota el adaptador de pantalla que se va a consultar. En este ejemplo se usa D3DADAPTER_DEFAULT para especificar el adaptador de pantalla principal. El segundo parámetro es un valor del tipo enumerado D3DDEVTYPE , especificando el tipo de dispositivo. El tercer parámetro especifica el formato de la superficie. El cuarto parámetro indica a Direct3D si se debe consultar el muestreo múltiple en ventana completa (TRUE) o el suavizado de contorno de escena completa (FALSE). En este ejemplo se usa FALSE para indicar a Direct3D que se está preguntando sobre el suavizado de contorno de escenas completas. El último parámetro especifica la técnica de muestreo múltiple que desea probar. Use un valor del tipo enumerado D3DMULTISAMPLE_TYPE . En este ejemplo se comprueba si se admiten dos niveles de muestreo múltiple.

Si el dispositivo admite el nivel de muestreo múltiple que desea usar, el siguiente paso consiste en establecer los parámetros de presentación rellenando los miembros adecuados de la estructura de D3DPRESENT_PARAMETERS para crear una superficie de representación multimuestra. Después, puede crear el dispositivo. El código de ejemplo siguiente muestra cómo configurar un dispositivo con una superficie de representación de muestreo múltiple.

/*
* 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)

Para usar el muestreo múltiple, el miembro SwapEffect de D3DPRESENT_PARAMETER debe establecerse en D3DSWAPEFFECT_DISCARD.

El último paso consiste en habilitar el suavizado de contorno múltiple llamando al método IDirect3DDevice9::SetRenderState y estableciendo el D3DRS_MULTISAMPLEANTIALIAS en TRUE. Después de establecer este valor en TRUE, cualquier representación que haga tendrá aplicado el muestreo múltiple. Es posible que quiera habilitar y deshabilitar el muestreo múltiple, en función de lo que esté representando.

Suavizado de contorno