2012-06-27 87 views
0

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

我可以这样做吗?我试着创建一个空的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; 
} 

回答

0

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

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

+0

编辑:非常感谢!我花了几个小时坚持这一点。无论如何要多输出一次颜色或者是2的限制?我问,因为Unity Game Engine在COLOR1后似乎停止工作,例如COLOR2不起作用。至少我可以输出两次,多亏了你。我想要移植的着色器之一需要我对顶点着色器中的顶点颜色执行4次计算,并将其不同的结果输出到像素着色器。 Maya cgfx很好,因为它支持多种颜色设置,所以它可以采取COLOR4等。但另一方面统一...似乎只采取颜色,颜色1 – fghajhe

+0

对不起,不是统一的专家。寻找每个可能的Aux流。也许你可以把Color2打包成正切/正常数组,如果你不用它们作其他的东西。 –

+0

好的没问题。只是能够输出两次帮助我很多!我也会研究其他阵列的包装 – fghajhe