霧の色 (Direct3D 9)

ピクセルと頂点の両方の霧の色は、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 (ピクセル シェーダー内) は oFog と等しく、0 から 1 の間でクランプされます。
    • 上記の 2 つのケースがどちらも適用されていない場合、v1.w (ピクセル シェーダー内) は、頂点シェーダーで oD1.w が明示的に書き込まれている場合でも 0 になります。

詳細については、 D3DPMISCCAPS を参照してください。

霧の種類