フォグ公式
フォグ公式
C++ アプリケーションでは、Microsoft® Direct3D® で距離に応じてフォグ エフェクトの計算を変更することにより、フォグがシーンのオブジェクトの色に与える影響を制御できる。D3DFOGMODE 列挙型には、3 つのフォグ公式を識別するメンバが含まれている。すべての式は、アプリケーションが設定するパラメータを与えられ、距離の関数としてフォグ係数を計算する。
線形フォグ
これは D3DFOG_LINEAR を使って設定される。
ここで
- start はフォグ エフェクトが始まる距離である。
- end はフォグ エフェクトがそれ以上増加しなくなる距離である。
- d は深度、つまり視点からの距離を表す。範囲ベースのフォグの場合、d の値はカメラの位置と頂点との間の距離である。範囲ベースのフォグ以外の場合、d の値はカメラ空間の Z 座標の絶対値である。
指数フォグ
線形公式と指数公式は、ピクセル フォグと頂点フォグの両方でサポートされている。
これは D3DFOG_EXP を使って設定される。
ここで
- e は自然対数の底 (約 2.71828) である。
- density は 0.0 ~ 1.0 の範囲の任意のフォグ密度である。
- d は、既に説明したように、深度、つまり視点からの距離を表す。
これは D3DFOG_EXP2 を使って設定される。
ここで
- 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 として減少する。