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


Цвет тумана (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 явно написан в шейдере вершин, v1.w (в шейдере пикселей) равен oFog, зажатой от 0 до 1.
    • Если ни из двух описанных выше вариантов не применяется, v1.w (в шейдере пикселей) равно 0, даже если oD1.w явно написан в шейдере вершин.

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

Типы туманов