霧の数式 (Direct3D 9)

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

線形霧

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

direct3d 線形霧の数式

where

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

指数霧

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

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

direct3d 指数霧の数式

where

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

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

direct3d 指数 2 霧の数式

where

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

Note

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

 

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

距離と色の量に対する霧の数式のグラフ

D3DFOG_LINEARは、開始時は 1.0、末尾は 0.0 です。 近接平面または遠方平面に対して相対的に測定されません。

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

direct3d の霧効果の数式

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

霧の種類