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 一样。要将两个颜色向量混合在一起,只需将它们相乘即可。也可能建议这样做:

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

saturate() 函数将在 0.0 到 1.0 的范围内裁剪颜色中的每个 RGB 值,这可以避免任何可能的显示伪影。

于 2012-08-08T03:34:25.847 回答