Platform SDK: DirectX

ピクセル フォグの使用

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

[C++]

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

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

次の例は、以上の手順をコードで示す。

// 簡単にするために、この例では各呼び出しの後で
// エラー値をチェックしない。実際のアプリケーションでは、
// エラー値を適切にチェックすること。
//
// この例では、g_lpDevice は IDirect3DDevice7 インターフェイスへの
// 有効なポインタである。
void SetupPixelFog(DWORD dwColor, DWORD dwMode)
{
    float fStart = 0.5f,    // 線形モード用
          fEnd   = 0.8f,
          fDensity = 0.66;  // 指数モード用
 
    // フォグ ブレンディングを有効にする。
    g_lpDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE);
 
    // フォグ カラーを設定する。
    g_lpDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, dwColor);
    
    // フォグ パラメータを設定する。
    if(D3DFOG_LINEAR == dwMode)
    {
        g_lpDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, dwMode);
        g_lpDevice->SetRenderState(D3DRENDERSTATE_FOGSTART, *(DWORD *)(&fStart));
        g_lpDevice->SetRenderState(D3DRENDERSTATE_FOGEND,   *(DWORD *)(&fEnd));
    }
    else
    {
        g_lpDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, dwMode);
        g_lpDevice->SetRenderState(D3DRENDERSTATE_FOGDENSITY, *(DWORD *)(&fDensity));
    }
 
}

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

[Visual Basic]

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

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

次の例は、以上の手順をコードで示す。

' 簡単にするために、この例では各呼び出しの後で
' エラー値をチェックしない。実際のアプリケーションでは、
' エラー値を適切にチェックすること。
'
' この例では、g_d3dDevice は Direct3DDevice7 オブジェクトへの
' 有効なポインタである。
Sub SetupPixelFog(lColor As Long, Mode As CONST_D3DFOGMODE)
Dim StartFog As Single, _
EndFog As Single, _
Density As Single
    
' 線形モード用
StartFog = 0.5:EndFog = 0.8
    
' 指数モード用
Density = 0.66
 
' フォグ ブレンディングを有効にする。
Call g_d3dDevice.SetRenderState(D3DRENDERSTATE_FOGENABLE, True)
 
' フォグ カラーを設定する。
Call g_d3dDevice.SetRenderState(D3DRENDERSTATE_FOGCOLOR, lColor)
    
' フォグ パラメータを設定する。
If Mode = D3DFOG_LINEAR Then
Call g_d3dDevice.SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, Mode)
Call g_d3dDevice.SetRenderStateSingle(D3DRENDERSTATE_FOGSTART, StartFog)
Call g_d3dDevice.SetRenderStateSingle(D3DRENDERSTATE_FOGEND, EndFog)
Else
Call g_d3dDevice.SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, Mode)
Call g_d3dDevice.SetRenderStateSingle(D3DRENDERSTATE_FOGDENSITY, Density)
End If
End Sub