フォグ色
フォグ色
ピクセル フォグおよび頂点フォグの両方のフォグ色は、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;
フォグの適用は、固定機能パイプラインを使う場合とプログラマブル パイプラインを使う場合とでは異なる。
- ドライバが D3DPMISCCAPS_FOGANDSPECULARALPHA をサポートしている場合
- 固定機能パイプラインを使う場合で、D3DRS_FOGCOLOR を設定した場合は、ピクセル シェーダの v1.w はフォグ レンダリング ステートで設定した値と等しくなる。
- プログラマブル パイプラインを使う場合は、頂点シェーダで明示的に oD1.w を記述している場合でも、ピクセル シェーダの v1.w は 0 になる。
- ドライバが D3DPMISCCAPS_FOGANDSPECULARALPHA をサポートしていない場合
- 固定機能パイプラインを使う場合で、D3DRS_FOGCOLOR を設定した場合は、ピクセル シェーダの v1.w はフォグ レンダリング ステートで設定した値と等しくなる。
- 頂点シェーダで oFog が明示的に記述されている場合は、ピクセル シェーダの v1.w は、0 ~ 1 に制限された oFog と等しくなる。
- 上の 2 つのいずれにも該当しない場合は、頂点シェーダで明示的に oD1.w を記述している場合でも、ピクセル シェーダの v1.w は 0 になる。
詳細については、「D3DPMISCCAPS」を参照すること。