Skip to content

IEffectFog

Chuck Walbourn edited this page Nov 7, 2018 · 9 revisions

This abstract interface controls distance fog settings. Settings for this interface can influence the choice of shader permutation. This interface is implemented by BasicEffect, AlphaTestEffect, DualTextureEffect, EnvironmentMapEffect, NormalMapEffect, and SkinnedEffect.

Obtaining the interface

There are two methods used in DirectX Tool Kit. For simple cases, just maintain a reference directly to the desired effect class:

std::shared_ptr<BasicEffect> effect;

...

effect->SetFogEnable(true);
effect->SetFogStart(6);
effect->SetFogEnd(8);
effect->SetFogColor( Colors::CornflowerBlue );

For more general cases where a number of effect classes can be in use (such as Model which uses a mix of BasicEffect, DualTextureEffect, SkinnedEffect, and/or DGSLEffect), use Run-Time Type Information (RTTI) to obtain the interface.

std::shared_ptr<IEffect> effect;

...

auto ifog = dynamic_cast<IEffectFog*>( effect.get() );
if ( ifog )
{
    ifog->SetFogEnable(true);
    ifog->SetFogStart(6);
    ifog->SetFogEnd(8);
    ifog->SetFogColor( Colors::CornflowerBlue );
}

Fog

The fog effects work for both right-handed and left-handed coordinate systems, but the distance settings should be negated for left-handed coordinates.

Built-in Effect Notes

BasicEffect, AlphaTestEffect, DualTextureEffect, EnvironmentMapEffect, NormalMapEffect, SkinnedEffect

These implement a simple linear fog which is inexpensive on all feature levels.

DGSLEffect

Fog settings are encoded in the choice of DGSL pixel shader, if supported, and these shaders do not expose settings to control such effects. Therefore, this built-in effect does not support this interface. The default materials (Unlit, Lambert, and Phong) have no fog effects.

For Use

  • Universal Windows Platform apps
  • Windows desktop apps
  • Windows 11
  • Windows 10
  • Windows 8.1
  • Xbox One

Architecture

  • x86
  • x64
  • ARM64

For Development

  • Visual Studio 2022
  • Visual Studio 2019 (16.11)
  • clang/LLVM v12 - v18
  • MinGW 12.2, 13.2
  • CMake 3.20

Related Projects

DirectX Tool Kit for DirectX 12

DirectXMesh

DirectXTex

DirectXMath

Win2D

Tools

Test Suite

Model Viewer

Content Exporter

DxCapsViewer

Clone this wiki locally