Получаване на цвета на връх в 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;
   }

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

Благодаря


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