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 = ???;
}

ここで、xはカメラ位置と頂点位置からの距離、fdは霧の色のパーセンテージ、FogDistanceはオブジェクトが霧の影響を受けない距離、FogIntensityは霧の強さです。

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

編集:ちなみに、メンテナンス不可能な設定コードでごめんなさい。

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

4

1 に答える 1

5

関数が必要ですlerpMSDN)。それが「線形補間」機能です。

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

関数は、パーセンテージ(0から100の範囲)ではなく、lerp0から1の間の値を取ります。

したがって、コードはおそらく次のようになります。

_in.color = lerp(_in.color, someOtherColor, fogAmount);
于 2012-03-26T10:12:52.890 に答える