フォグ色

フォグ色

ピクセル フォグおよび頂点フォグの両方のフォグ色は、D3DRS_FOGCOLOR レンダリング ステートを使って設定する。レンダリング ステート値は、RGBA 色として指定する任意の RGB 色である。アルファ成分は無視される。

次の C++ コードは、フォグ色を白に設定する。

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

フォグの適用は、固定機能パイプラインを使う場合とプログラマブル パイプラインを使う場合とでは異なる。

  1. ドライバが D3DPMISCCAPS_FOGANDSPECULARALPHA をサポートしている場合
    • 固定機能パイプラインを使う場合で、D3DRS_FOGCOLOR を設定した場合は、ピクセル シェーダの v1.w はフォグ レンダリング ステートで設定した値と等しくなる。
    • プログラマブル パイプラインを使う場合は、頂点シェーダで明示的に oD1.w を記述している場合でも、ピクセル シェーダの v1.w は 0 になる。
  2. ドライバが D3DPMISCCAPS_FOGANDSPECULARALPHA をサポートしていない場合
    • 固定機能パイプラインを使う場合で、D3DRS_FOGCOLOR を設定した場合は、ピクセル シェーダの v1.w はフォグ レンダリング ステートで設定した値と等しくなる。
    • 頂点シェーダで oFog が明示的に記述されている場合は、ピクセル シェーダの v1.w は、0 ~ 1 に制限された oFog と等しくなる。
    • 上の 2 つのいずれにも該当しない場合は、頂点シェーダで明示的に oD1.w を記述している場合でも、ピクセル シェーダの v1.w は 0 になる。

詳細については、「D3DPMISCCAPS」を参照すること。