次の方法で共有


フォグ公式

フォグ公式

C++ アプリケーションでは、Microsoft® Direct3D® で距離に応じてフォグ エフェクトの計算を変更することにより、フォグがシーンのオブジェクトの色に与える影響を制御できる。D3DFOGMODE 列挙型には、3 つのフォグ公式を識別するメンバが含まれている。すべての式は、アプリケーションが設定するパラメータを与えられ、距離の関数としてフォグ係数を計算する。

線形フォグ

これは D3DFOG_LINEAR を使って設定される。

Direct3D 線形フォグの方程式

ここで

  • start はフォグ エフェクトが始まる距離である。
  • end はフォグ エフェクトがそれ以上増加しなくなる距離である。
  • d は深度、つまり視点からの距離を表す。範囲ベースのフォグの場合、d の値はカメラの位置と頂点との間の距離である。範囲ベースのフォグ以外の場合、d の値はカメラ空間の Z 座標の絶対値である。

指数フォグ

線形公式と指数公式は、ピクセル フォグと頂点フォグの両方でサポートされている。

これは D3DFOG_EXP を使って設定される。

Direct3D 指数フォグの方程式

ここで

  • e は自然対数の底 (約 2.71828) である。
  • density は 0.0 ~ 1.0 の範囲の任意のフォグ密度である。
  • d は、既に説明したように、深度、つまり視点からの距離を表す。

これは D3DFOG_EXP2 を使って設定される。

Direct3D 指数フォグの方程式

ここで

  • e は上と同じように自然対数の底である。
  • density は上と同じように 0.0 ~ 1.0 の範囲の任意のフォグ密度である。
  • d は、上と同じように、深度、つまり視点からの距離を表す。

  システムは、頂点のスペキュラ色のアルファ成分にフォグ係数を格納する。アプリケーションで独自のトランスフォームとライティングを実行する場合は、フォグ係数を手動で挿入しておくと、レンダリング時にシステムがそのフォグ係数を適用する。

次の図では、公式のパラメータに共通の値を使って、これらの公式をグラフに示している。

フォグ公式

D3DFOG_LINEAR は、start では 1.0 で、end では 0.0 である。この値は、前方クリップ面または後方クリップ面からの相対的な値ではない。

Direct3D がフォグ エフェクトを計算するときは、上の等式の 1 つのフォグ係数を次に示すブレンディング公式で使う。

フォグの計算

この公式は、現在のポリゴン C の色をフォグ係数 f により効果的にスケーリングし、その積を、フォグ係数のビット反転によりスケーリングしたフォグ色 C に加算する。結果として得られる色値は、フォグ色と元の色のブレンドであり、距離の係数でもある。この公式は、Microsoft DirectX® 7.0 およびそれ以降がサポートするすべてのデバイスに適用される。従来からのランプ デバイスに対しては、フォグ係数はディフューズ色成分とスペキュラ色成分をスケーリングし、0.0 から 1.0 の範囲内 (0.0 と 1.0 を含む) に収める。フォグ係数は、通常、前方クリップ面を 1.0 として始まり、後方クリップ面を 0.0 として減少する。