Platform SDK: DirectX

フォグ公式

[C++]

C++ アプリケーションでは、Direct3D で距離に応じてフォグ エフェクトの計算を変更することにより、フォグがシーンのオブジェクトの色に与える影響を制御できる。D3DFOGMODE 列挙型には、3 つのフォグ公式を識別するメンバが含まれている。すべての式は、アプリケーションが設定するパラメータを与えられ、距離の関数としてフォグ係数を計算する。距離自体がどのように計算されるかは、範囲ベースのフォグが有効であるかどうかと、射影行列により変化する。詳細については、「視点からの相対深度 対 Z ベースの深度」および「範囲ベースのフォグ」を参照すること。

[Visual Basic]

Visual Basic で記述されたアプリケーションでは、Direct3D で距離に応じてフォグ エフェクトの計算を変更することにより、フォグがシーンのオブジェクトの色に与える影響を制御できる。CONST_D3DFOGMODE 列挙には、3 つのフォグ公式を識別するメンバが含まれている。すべての式は、アプリケーションが設定するパラメータを与えられ、距離の関数としてフォグ係数を計算する。距離自体がどのように計算されるかは、範囲ベースのフォグが有効であるかどうかと、射影行列により変化する。詳細については、「視点からの相対深度 対 Z ベースの深度」および「範囲ベースのフォグ」を参照すること。

D3DFOG_LINEAR

この線形公式で、start はフォグ エフェクトが始まる距離、end はフォグ エフェクトがそれ以上増加しなくなる距離、d はシーンの範囲内での深度 (または視点からの距離) を表す。オブジェクトが遠方になるに従って d の値が増加する。線形公式はピクセル フォグと頂点フォグの両方でサポートされるが、指数公式は、現在、ピクセル フォグを使用するときだけサポートされる。

D3DFOG_EXP

D3DFOG_EXP2

上の 2 つの指数公式で、e は自然対数の底 (約 2.71828)、density は 0.0 から 1.0 の範囲の任意のフォグ密度、d はシーンの範囲内での深度 (または視点からの距離) である。

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

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

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

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