Partager via


Full-Scene Antialiasing (Direct3D 9)

L’anticrénelage de scène complète fait référence au flou des bords de chaque polygone de la scène à mesure qu’il est rastérisé en une seule passe ; aucune deuxième passe n’est requise. L’anticrénelage en pleine scène, lorsqu’il est pris en charge, affecte uniquement les triangles et les groupes de triangles. Les lignes ne peuvent pas être anticrénelées à l’aide des services Direct3D. L’anticrénelage en scène complète est effectué dans Direct3D à l’aide d’un échantillonnage multiple sur chaque pixel. Lorsque le multi-échantillonnage est activé, tous les sous-échantillons d’un pixel sont mis à jour en une seule passe, mais lorsqu’ils sont utilisés pour d’autres effets qui impliquent plusieurs passes de rendu, l’application peut spécifier que seuls certains sous-échantillons doivent être affectés par une passe de rendu donnée. Cette dernière approche permet de simuler le flou du mouvement, les effets de focus de profondeur de champ, le flou de réflexion, etc.

Dans les deux cas, les différents échantillons enregistrés pour chaque pixel sont fusionnés et générés à l’écran. Cela permet d’améliorer la qualité d’image de l’anticrénelage ou d’autres effets.

Avant de créer un appareil avec la méthode IDirect3D9::CreateDevice , vous devez déterminer si l’anticrénelage de scène complète est pris en charge. Pour ce faire, appelez la méthode IDirect3D9::CheckDeviceMultiSampleType , comme indiqué dans l’exemple de code ci-dessous.

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

Le premier paramètre accepté par IDirect3D9::CheckDeviceMultiSampleType est un nombre ordinal qui désigne l’adaptateur d’affichage à interroger. Cet exemple utilise D3DADAPTER_DEFAULT pour spécifier l’adaptateur d’affichage principal. Le deuxième paramètre est une valeur du type énuméré D3DDEVTYPE , spécifiant le type d’appareil. Le troisième paramètre spécifie le format de la surface. Le quatrième paramètre indique à Direct3D s’il faut se renseigner sur l’échantillonnage multi-fenêtre (TRUE) ou l’anticrénelage en scène complète (FALSE). Cet exemple utilise FALSE pour indiquer à Direct3D qu’il s’interroge sur l’anticrénelage en scène complète. Le dernier paramètre spécifie la technique d’échantillonnage multiple que vous souhaitez tester. Utilisez une valeur du type énuméré D3DMULTISAMPLE_TYPE . Cet exemple teste si deux niveaux d’échantillonnage multiple sont pris en charge.

Si l’appareil prend en charge le niveau d’échantillonnage multiple que vous souhaitez utiliser, l’étape suivante consiste à définir les paramètres de présentation en remplissant les membres appropriés de la structure D3DPRESENT_PARAMETERS pour créer une surface de rendu multi-échantillon. Après cela, vous pouvez créer l’appareil. L’exemple de code ci-dessous montre comment configurer un appareil avec une surface de rendu multi-échantillonnage.

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

Pour utiliser l’échantillonnage multiple, le membre SwapEffect de D3DPRESENT_PARAMETER doit être défini sur D3DSWAPEFFECT_DISCARD.

La dernière étape consiste à activer l’anticrénelage d’échantillonnage multiple en appelant la méthode IDirect3DDevice9::SetRenderState et en définissant l’D3DRS_MULTISAMPLEANTIALIAS sur TRUE. Après avoir défini cette valeur sur TRUE, un échantillonnage multiple est appliqué à tout rendu que vous effectuez. Vous pouvez activer et désactiver l’échantillonnage multiple, en fonction de ce que vous affichez.

Antialiasing