2012-08-08 218 views
0

我有以下的顶点和像素着色:获取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游戏。四边形的顶点包含我想用于着色位图的着色颜色。我怎样才能获得当前顶点的颜色,所以我可以在像素着色器中乘以当前像素颜色?

感谢

回答

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

的饱和()函数将夹在0.0〜1.0的范围,其可避免任何可能的显示伪影中的颜色的每个RGB值。