0

次の頂点シェーダーとピクセル シェーダーがあります。

    struct VS_INPUT
   {
      float4 Position  : POSITION0;
      float2 TexCoord  : TEXCOORD0;
      float4 Color     : TEXCOORD1;
   };
   struct VS_OUTPUT
   {
      float4 Position  : POSITION0;
      float4 Color     : COLOR0;
      float2 TexCoord  : TEXCOORD0;
   };

   float4x4 projview_matrix;

   VS_OUTPUT vs_main(VS_INPUT Input)
   {
      VS_OUTPUT Output;
      Output.Position = mul(Input.Position, projview_matrix);
      Output.Color = Input.Color;
      Output.TexCoord = Input.TexCoord;
      return Output;
   }

ピクセル

   texture tex;
   sampler2D s = sampler_state {
      texture = <tex>;
   };
   float4 ps_main(VS_OUTPUT Input) : COLOR0
   {
      float4 pixel = tex2D(s, Input.TexCoord.xy);
      return pixel;
   }

これは2Dゲーム用です。四角形の頂点には、ビットマップを着色するために使用したい着色色が含まれています。現在の頂点の色を取得して、ピクセル シェーダーで現在のピクセルの色を乗算するにはどうすればよいですか?

ありがとう

4

1 に答える 1

0

ピクセル シェーダーで、次の操作を行います。

float4 pixel = tex2D(s, Input.TexCoord.xy) * Input.Color;

Input.Color 値は、Input.TexCoord と同様に、平面全体で線形に解釈されます。2 つのカラー ベクトルをブレンドするには、単純にそれらを乗算します。次のようにすることもお勧めします。

float4 pixel = tex2D(s, Input.TexCoord.xy) * Input.Color;
pixel = saturate(pixel);

saturate() 関数は、色の各 RGB 値を 0.0 から 1.0 の範囲でクリップします。これにより、表示のアーティファクトを回避できます。

于 2012-08-08T03:34:25.847 に答える