Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CGFX着色器多次输出垂直数据_C_Shader_Pixel Shader_Vertex Shader_Cg - Fatal编程技术网

CGFX着色器多次输出垂直数据

CGFX着色器多次输出垂直数据,c,shader,pixel-shader,vertex-shader,cg,C,Shader,Pixel Shader,Vertex Shader,Cg,如何将某些内容从顶点着色器多次输出到像素着色器。例如,在顶点着色器中对顶点颜色执行一些不同的数学操作后,我需要将顶点颜色作为浮点4输出到像素着色器4次 我能做这个吗?我尝试创建一个空的float4 color2,从In.color读取In.vertcolor并输出它。。。我没有得到任何错误,但我的纹理是白色的。它只是读取任何空的浮动4 这是我在这一部分的代码。谢谢 ////////////////////////////////////////////////////////////// //

如何将某些内容从顶点着色器多次输出到像素着色器。例如,在顶点着色器中对顶点颜色执行一些不同的数学操作后,我需要将顶点颜色作为浮点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;
}

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


请确保在应用程序中将次要颜色COLOR1分配为属性流。

Edit:非常感谢!我花了几个小时在这上面。是否还要多次输出颜色,还是限制为2?我这样问是因为Unity游戏引擎在COLOR1之后似乎停止工作,例如COLOR2不工作。谢谢你,至少我可以输出两次。我要移植的一个着色器需要我对顶点着色器中的顶点颜色执行4次数学运算,并将其不同结果输出到像素着色器。Maya cgfx很好,因为它支持多个颜色集,因此可以使用COLOR4等。但另一方面,Unity。。。似乎只取颜色,颜色1令人担忧,而不是统一的专家。寻找所有可能的辅助流。也许你可以把Color2打包成切线/副法线数组,如果你不把它们用于其他东西的话。好的,没问题。只是能够输出两次就帮了我很大的忙!我还将研究其他阵列中的打包