フォグ カラー (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;
フォグの適用は、固定機能パイプラインを使う場合とプログラム可能なパイプラインを使う場合とでは異なります。
- ドライバーが 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」を参照してください。