2012-08-08 217 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值。