霧の色 (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 (ピクセル シェーダー) は、fog renderstate で設定された値と等しくなります。
    • プログラム可能なパイプラインが使用されている場合、v1.w (ピクセル シェーダー内) は、oD1.w が頂点シェーダーで明示的に書き込まれている場合でも 0 になります。
  2. ドライバーがD3DPMISCCAPS_FOGANDSPECULARALPHAをサポートしていない場合:
    • 固定関数パイプラインが使用され、D3DRS_FOGCOLORが設定されている場合、v1.w (ピクセル シェーダー) は、霧の renderstate で設定された値と等しくなります。
    • oFog が頂点シェーダーで明示的に書き込まれている場合、v1.w (ピクセル シェーダー内) は oFog と等しく、0 から 1 の間でクランプされます。
    • 上記の 2 つのケースのいずれも適用されていない場合、oD1.w が頂点シェーダーで明示的に書き込まれている場合でも、v1.w (ピクセル シェーダー内) は 0 になります。

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

霧の種類