Поделиться через


Цвет тумана (Direct3D 9)

Цвет тумана для пикселя и тумана вершин задается через состояние D3DRS_FOGCOLOR отрисовки. Значения состояния отрисовки могут быть любого цвета RGB, указанного в качестве цвета RGBA. Альфа-компонент игнорируется.

В следующем примере 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, версия 1.w (в пиксельном шейдере) равна значению, заданному в туманном отрисовке.
    • Если используется программируемый конвейер, версия 1.w (в пиксельном шейдере) равна 0, даже если oD1.w явно записан в вершинном шейдере.
  2. Если драйвер НЕ поддерживает D3DPMISCCAPS_FOGANDSPECULARALPHA:
    • Если используется конвейер фиксированной функции и задан D3DRS_FOGCOLOR, то v1.w (в пиксельном шейдере) равно значению, заданному в туманном отрисовке.
    • Если oFog явно записан в вершинном шейдере, версия 1.w (в пиксельном шейдере) равна oFog и зажата в диапазоне от 0 до 1.
    • Если ни тот из указанных выше вариантов не применяется, версия 1.w (в пиксельном шейдере) равна 0, даже если oD1.w явно написан в вершинном шейдере.

Дополнительные сведения см. в разделе D3DPMISCCAPS.

Типы тумана