2012-06-27 85 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