Получение цвета вершины в HLSL?

У меня есть следующие вершинные и пиксельные шейдеры:

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

px

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

Это для 2д игры. Вершины четырехугольников содержат цвета тонирования, которые я хочу использовать для окрашивания растрового изображения. Как я могу получить цвет текущей вершины, чтобы я мог умножить его в пиксельном шейдере на текущий цвет пикселя?

Спасибо


person jmasterx    schedule 08.08.2012    source источник


Ответы (1)


В своем пиксельном шейдере выполните:

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() обрезает каждое значение RGB вашего цвета в диапазоне от 0,0 до 1,0, что позволяет избежать любых возможных артефактов отображения.

person Caleb Joseph    schedule 08.08.2012