雾色 (Direct3D 9)

像素和顶点雾的雾色通过D3DRS_FOGCOLOR呈现状态设置。 呈现状态值可以是任何 RGB 颜色,指定为 RGBA 颜色。 将忽略 alpha 分量。

以下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(在像素着色器中)等于在雾呈现状态中设置的值。
    • 如果使用可编程管道,则 v1.w(在像素着色器中)等于 0,即使 oD1.w 显式写入顶点着色器也是如此。
  2. 如果驱动程序不支持D3DPMISCCAPS_FOGANDSPECULARALPHA:
    • 如果使用固定函数管道并设置D3DRS_FOGCOLOR,则 v1.w (在像素着色器中)等于在雾呈现状态中设置的值。
    • 如果 oFog 以顶点着色器显式写入,则 v1.w(在像素着色器中)等于 oFog,固定在 0 和 1 之间。
    • 如果上述两种情况均不适用,则 v1.w(在像素着色器中)等于 0,即使 oD1.w 显式写入顶点着色器也是如此。

有关详细信息,请参阅 D3DPMISCCAPS

雾类型