CGFX着色器多次输出vert数据

时间:2012-06-27 04:40:52

标签: c shader pixel-shader vertex-shader cg

如何多次从顶点着色器向像素着色器输出内容。例如,我需要在顶点着色器中对顶点颜色执行一些不同的数学运算后,将顶点颜色作为浮点数4输出到像素着色器4次?

我能这样做吗?我尝试创建一个空的float4 color2,从In.color中读取In.vertcolor并输出...我没有得到任何错误,但我的纹理是白色的。它只是读取任何空浮4 ...

这是我的本节代码。谢谢!

//////////////////////////////////////////////////////////////
// Structs section 
// input from application
struct a2v {
float4 position  : POSITION;
float4 normal    : NORMAL;
float2 texCoord : TEXCOORD0;
float2 secondUV : TEXCOORD1;
float4 color: COLOR;
float4 color2;

};

// output to fragment program
struct v2f {
    float4 position        : POSITION;
    float2 texCoord : TEXCOORD0;

    float2 secondUV : TEXCOORD1;
    float3 worldNormal     : TEXCOORD2;
    float4 color: COLOR;
    float4 color2;

};



//////////////////////////////////////////////////////////////
// Vertex Shader 

v2f vShader(a2v In)
{
v2f Out;
Out.texCoord = In.texCoord;
Out.secondUV = In.secondUV;

float4 Mask1 = floor ((fmod((In.color  * 100f ), 10f))) *.111f;
float4 Mask2 = floor ((fmod((In.color2  * 100f ), 10f))) *.111f;
Out.color = Mask1;
Out.color2 = Mask2;


Out.position = mul(WorldViewProjection, In.position);
Out.worldNormal = mul(WorldInverseTranspose, In.normal).xyz;

return Out;
}

1 个答案:

答案 0 :(得分:0)

有一个COLOR1绑定属性,您可以将其分配给a2v和v2f结构中的'color2'字段。

确保在您的应用程序中将辅助颜色(COLOR1)分配为属性流。