我有以下顶点和像素着色器:
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游戏。四边形的顶点包含我想用来着色位图的着色颜色。如何获取当前顶点的颜色,以便在像素着色器中将其乘以当前像素颜色?
由于
答案 0 :(得分: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()函数会将颜色中的每个RGB值剪裁在0.0到1.0的范围内,这样可以避免任何可能的显示瑕疵。