Microsoft DirectX 8.0 (C++)

ピクセル フォグの使い方

アプリケーションでピクセル フォグを有効にするには、次の手順を実行する。

C++ アプリケーションでピクセル フォグを有効にするには

  1. D3DRS_FOGENABLE レンダリング ステートを TRUE に設定して、フォグ ブレンディングを有効にする。
  2. D3DRS_FOGCOLOR レンダリング ステートで、目的のフォグ カラーを設定する。
  3. D3DRS_FOGTABLEMODE レンダリング ステートを D3DFOGMODE 列挙型の対応するメンバに設定して、使用するフォグ公式を選択する。
  4. 選択したフォグ モードに必要なフォグ パラメータを、関連するレンダリング ステートに設定する。線形フォグの開始距離と終了距離、指数フォグのフォグ密度も含む。

次のサンプル コードは、これらの手順を示している。

// 簡単にするために、この例では、呼び出しの後で
// エラー値をチェックしない。実際のアプリケーションでは、
// エラー値を正しくチェックすること。
//
// この例では、g_pDevice は IDirect3DDevice8 インターフェイスへの
// 有効なポインタであると仮定している。
void SetupPixelFog(DWORD Color, DWORD Mode)
{
    float Start = 0.5f,    // 線形モード用。
          End   = 0.8f,
          Density = 0.66;  // 指数モード用。
 
    // フォグ ブレンディングを有効にする。
    g_pDevice->SetRenderState(D3DRS_FOGENABLE, TRUE);
 
    // フォグ カラーを設定する。
    g_pDevice->SetRenderState(D3DRS_FOGCOLOR, Color);
    
    // フォグ パラメータを設定する。
    if(D3DFOG_LINEAR == Mode)
    {
        g_pDevice->SetRenderState(D3DRS_FOGTABLEMODE, Mode);
        g_pDevice->SetRenderState(D3DRS_FOGSTART, *(DWORD *)(&Start));
        g_pDevice->SetRenderState(D3DRS_FOGEND,   *(DWORD *)(&End));
    }
    else
    {
        g_pDevice->SetRenderState(D3DRS_FOGTABLEMODE, Mode);
        g_pDevice->SetRenderState(D3DRS_FOGDENSITY, *(DWORD *)(&Density));
    }
 
}

  IDirect3DDevice8::SetRenderState メソッドは、第 2 パラメータに DWORD 値だけを受け取るが、浮動小数点のフォグ パラメータが要求されることもある。上の例では浮動小数点の値を SetRenderState に渡すために、データを平行移動するのではなく、浮動小数点変数のアドレスを DWORD ポインタにキャストして、次にそれを参照している。