Couleur de brouillard (Direct3D 9)

La couleur de brouillard pour le brouillard de pixels et de vertex est définie via l’état de rendu D3DRS_FOGCOLOR. Les valeurs d’état de rendu peuvent être n’importe quelle couleur RVB, spécifiée en tant que couleur RVBA. Le composant alpha est ignoré.

L’exemple C++ suivant définit la couleur de brouillard sur blanc.

/* For this example, the d3dDevice variable is
* a valid pointer to an IDirect3DDevice9 interface.
*/
HRESULT hr;
hr = d3dDevice->SetRenderState(
                    D3DRS_FOGCOLOR,
                    0x00FFFFFF); // Highest 8 bits are not used.
if(FAILED(hr))
    return hr;

Le brouillard est appliqué différemment par le pipeline de fonction fixe et le pipeline programmable.

  1. Si le pilote prend en charge D3DPMISCCAPS_FOGANDSPECULARALPHA :
    • Si le pipeline de fonction fixe est utilisé et qu’D3DRS_FOGCOLOR est défini, v1.w (dans le nuanceur de pixels) est égal à la valeur définie dans l’état de rendu de brouillard.
    • Si le pipeline programmable est utilisé, v1.w (dans le nuanceur de pixels) est égal à 0, même si oD1.w est explicitement écrit dans un nuanceur de vertex.
  2. Si le pilote ne prend PAS en charge D3DPMISCCAPS_FOGANDSPECULARALPHA :
    • Si le pipeline de fonction fixe est utilisé et D3DRS_FOGCOLOR est défini, la version 1.w (dans le nuanceur de pixels) est égale à la valeur définie dans l’état de rendu de brouillard.
    • Si oFog est explicitement écrit dans un nuanceur de vertex, v1.w (dans le nuanceur de pixels) est égal à oFog, limité entre 0 et 1.
    • Si aucun des deux cas ci-dessus ne s’applique, v1.w (dans le nuanceur de pixels) est égal à 0, même si oD1.w est explicitement écrit dans un nuanceur de vertex.

Pour plus d’informations, consultez D3DPMISCCAPS.

Types de brouillard