2012-03-25 15 views
1

私のエフェクトファイルで霧の特徴を作成しています。ピクセルシェーダーで、カメラの位置と入力の位置からの距離を計算します は、x、 fdはフォグカラーの割合カメラ位置と頂点位置からの距離である、 FogDistanceオブジェクトは霧の影響を受けない距離であり、 FogIntensity:C#/ HLSL&XNA - HLSLのパーセンテージで2つの色を混在させる

float x = distance(_in.pos3d, CameraPosition); 
float fd; 
if(Fog) 
{ 
    if(x > FogDistance) 
     fd = ((x-FogDistance) * FogIntensity > 100) ? 100 : ((x-FogDistance) * FogIntensity); 
    //_in.color = ???; 
} 

霧がどれほど強いかです。

私が得ようとしているのは、霧の色の(fd%)を含む色です。たとえば、霧の色がオレンジで、入力が白でfdが25%の場合、生成される色は白+ 25%のオレンジです。

EDIT:ところで、維持できない設定コードは申し訳ありません。

EDIT 2:2つの透明なレイヤーが透明な結果を持っていることに気がついたので、少し質問を整理しました。頂点入力のパーセンテージはありません。

答えて

2

lerp機能(MSDN)が必要です。これが「線形補間」機能です。

ピクセルシェーダの色は基本的にベクトルと同じなので、任意のベクトル関数を使用できます。

_in.color = lerp(_in.color, someOtherColor, fogAmount); 
:だからあなたのコードは、おそらく次のようになります0〜

1.むしろ(範囲0〜100で)パーセンテージより

は、lerp関数が値をとります

関連する問題