霧の数式 (Direct3D 9)
C++ アプリケーションでは、Microsoft Direct3D が距離を超えて霧効果を計算する方法を変更することで、シーン内のオブジェクトの色に対する霧の影響を制御できます。 D3DFOGMODE 列挙型には、3 つの霧の数式を識別するメンバーが含まれています。 すべての数式は、アプリケーションが設定するパラメーターを指定して、距離の関数として霧係数を計算します。
線形霧
これは、次のD3DFOG_LINEAR式で設定されます。
direct3d 線形霧式
どこ
- start は、霧効果が開始される距離です。
- end は、霧効果が増加しなくなった距離です。
- d は、深さ、または視点からの距離を表します。 範囲ベースの霧の場合、d の値はカメラの位置と頂点の間の距離です。 範囲ベースではない霧の場合、d の値はカメラ空間の Z 座標の絶対値です。
指数霧
線形数式と指数式は、ピクセル 霧と頂点霧の両方でサポートされています。
これは、次のD3DFOG_EXP式で設定されます。
direct3d 指数霧方程式
どこ
- e は自然対数の底 (約 2.71828) です。
- 密度は、0.0 から 1.0 の範囲の任意の霧密度です。
- d は、前述のように、深さ、または視点からの距離を表します。
これは、次のD3DFOG_EXP2式で設定されます。
direct3d 指数 2 霧方程式
どこ
- e は、上記の自然対数の底です。
- 密度は、上記のように 0.0 から 1.0 までの範囲の任意の霧密度です。
- d は、上で述べたように、深さ、または視点からの距離を表します。
手記
システムは、頂点の反射色のアルファ 成分に霧係数を格納します。 アプリケーションが独自の変換と照明を実行する場合は、レンダリング中にシステムによって適用される霧係数の値を手動で挿入できます。
次のグラフは、数式パラメーターと同様に共通の値を使用して、これらの数式を示しています。
距離と色グラフ
D3DFOG_LINEARは開始時に 1.0、最後に 0.0 です。 近くの平面または遠方平面を基準にして測定されません。
Direct3D は、霧の効果を計算するときに、次のブレンド式で上のいずれかの数式の霧係数を使用します。
direct3d方程式
この数式は、現在の多角形 C の色を霧係数 f で効果的にスケーリングし、霧の色 C に積を追加します。この積は、霧係数のビットごとの逆数でスケーリングされます。 結果の色の値は、距離の係数として、霧の色と元の色のブレンドです。 この数式は、Microsoft DirectX 7.0 以降でサポートされているすべてのデバイスに適用されます。 レガシ ランプ デバイスの場合、霧係数は拡散と反射色のコンポーネントをスケーリングし、0.0 と 1.0 の範囲にクランプします。 通常、霧係数は近くの平面では 1.0 から始まり、遠方平面では 0.0 に減少します。
関連トピック