霧の数式 (Direct3D 9)

C++ アプリケーションでは、Microsoft Direct3D が距離を越えて霧効果を計算する方法を変更することで、シーン内のオブジェクトの色に対する霧の影響を制御できます。 D3DFOGMODE 列挙型には、3 つの霧の数式を識別するメンバーが含まれています。 すべての数式は、アプリケーションが設定するパラメーターを指定して、距離の関数として霧係数を計算します。

線形霧

これは、次のD3DFOG_LINEAR式で設定されます。

equation of direct3d linear fog

where

  • start は、霧効果が開始される距離です。
  • end は、霧効果が増加しなくなった距離です。
  • d は、深さ、または視点からの距離を表します。 範囲ベースの霧の場合、d の値はカメラの位置と頂点の間の距離です。 範囲ベースではない霧の場合、d の値はカメラ空間の Z 座標の絶対値です。

指数霧

線形数式と指数式は、ピクセル 霧と頂点霧の両方でサポートされます。

これは、次のD3DFOG_EXP式で設定されます。

equation of direct3d exponential fog

where

  • e は自然対数の底 (約 2.71828) です。
  • density は、0.0 から 1.0 の範囲の任意の霧密度です。
  • d は、前に説明したように、深さまたは視点からの距離を表します。

これは、次のD3DFOG_EXP2式で設定されます。

equation of direct3d exponential 2 fog

where

  • e は、上記の自然対数の底です。
  • density は、上記のように 0.0 から 1.0 の範囲の任意の霧密度です。
  • d は、上で述べたように、深さ、または視点からの距離を表します。

Note

システムは、頂点の反射色のアルファ 成分に霧係数を格納します。 アプリケーションが独自の変換と照明を実行する場合は、レンダリング中にシステムによって適用される、霧率の値を手動で挿入できます。

 

次のグラフは、数式パラメーターと同様に共通の値を使用して、これらの数式を示しています。

graph of the fog formulas over distance and amount of color

D3DFOG_LINEARは、開始時は 1.0、末尾は 0.0 です。 近くの平面または遠方平面を基準にして測定されません。

Direct3D は、霧効果を計算するときに、次のブレンド式の上のいずれかの数式の霧係数を使用します。

equation of fog effects for direct3d

この数式では、現在の多角形 C の色を霧係数 f で効果的にスケーリングし、霧の色 C に積を追加します。この値は、霧係数のビットごとの逆数でスケーリングされます。 結果の色の値は、距離の係数として、霧の色と元の色のブレンドです。 この式は、Microsoft DirectX 7.0 以降でサポートされているすべてのデバイスに適用されます。 従来のランプ デバイスの場合、霧率は拡散と反射の色コンポーネントをスケーリングし、0.0 と 1.0 の範囲にクランプします。 通常、霧係数は、近くの平面では 1.0 から始まり、遠方平面では 0.0 に減少します。

霧の種類