Full-Scene Antialiasing (Direct3D 9)

L'antialiasing della scena completa si riferisce alla sfocatura dei bordi di ogni poligono nella scena come viene rasterizzato in un singolo passaggio; non è necessario alcun secondo passaggio. L'antialiasing full-scene, se supportato, influisce solo sui triangoli e sui gruppi di triangoli. Le righe non possono essere antialiasate usando i servizi Direct3D. L'antialiasing della scena completa viene eseguita in Direct3D usando multicampionamento su ogni pixel. Quando viene abilitato il multicampionamento, tutti i sottocampionati di un pixel vengono aggiornati in un passaggio, ma quando vengono usati per altri effetti che coinvolgono più passaggi di rendering, l'applicazione può specificare che solo alcuni sottocampionamento devono essere interessati da un determinato passaggio di rendering. Questo ultimo approccio consente la simulazione di sfocatura del movimento, effetti dello stato attivo di profondità del campo, blur reflection e così via.

In entrambi i casi, i vari campioni registrati per ogni pixel vengono combinati e restituiti allo schermo. Ciò consente di migliorare la qualità dell'immagine dell'antialiasing o di altri effetti.

Prima di creare un dispositivo con il metodo IDirect3D9::CreateDevice , è necessario determinare se l'antialiasing della scena completa è supportato. Eseguire questa operazione chiamando il metodo IDirect3D9::CheckDeviceMultiSampleType , come illustrato nell'esempio di codice seguente.

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

Il primo parametro che IDirect3D9::CheckDeviceMultiSampleType accetta è un numero ordinale che indica la scheda di visualizzazione per la query. Questo esempio usa D3DADAPTER_DEFAULT per specificare l'adattatore di visualizzazione primario. Il secondo parametro è un valore del tipo enumerato D3DDEVTYPE , specificando il tipo di dispositivo. Il terzo parametro specifica il formato della superficie. Il quarto parametro indica a Direct3D se richiedere informazioni su multisampling a finestra completa (TRUE) o antialiasing full-scene (FALSE). Questo esempio usa FALSE per indicare a Direct3D che sta chiedendo l'antialiasing full-scene. L'ultimo parametro specifica la tecnica di multicampionamento da testare. Usare un valore dal tipo enumerato D3DMULTISAMPLE_TYPE . Questo esempio verifica se sono supportati due livelli di multicampionamento.

Se il dispositivo supporta il livello di multicampionamento da usare, il passaggio successivo consiste nel impostare i parametri di presentazione inserendo i membri appropriati della struttura D3DPRESENT_PARAMETERS per creare una superficie di rendering multisample. In seguito, è possibile creare il dispositivo. Il codice di esempio seguente illustra come configurare un dispositivo con una superficie di rendering multisampling.

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

Per usare multicampionamento, il membro SwapEffect di D3DPRESENT_PARAMETER deve essere impostato su D3DSWAPEFFECT_DISCARD.

L'ultimo passaggio consiste nell'abilitare l'antialiasing multicampionamento chiamando il metodo IDirect3DDevice9::SetRenderState e impostando l'D3DRS_MULTISAMPLEANTIALIAS su TRUE. Dopo aver impostato questo valore su TRUE, qualsiasi rendering a cui verrà applicato il multicampionamento. È possibile abilitare e disabilitare il multicampionamento, a seconda di ciò che si sta eseguendo il rendering.

Antialias