Получение цвета вершины в 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;
}
ПВ
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 игры. Вершины четырехугольников содержат тонирующие цвета, которые я хочу использовать для тонирования растрового изображения. Как получить цвет текущей вершины, чтобы умножить его в пиксельном шейдере на текущий цвет пикселя?
Спасибо
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, что может избежать любых возможных артефактов отображения.