【问题标题】:CGFX shader outputing vert data multiple timesCGFX着色器多次输出顶点数据
【发布时间】:2012-06-28 11:45:14
【问题描述】:

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

我可以这样做吗?我尝试创建一个空的 float4 color2,从 In.color 读取 In.vertcolor 并输出...我没有收到任何错误,但我的纹理是白色的。它只是读取任何空的 float 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;
}

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 编辑:非常感谢!我花了几个小时坚持这个。无论如何要多次输出颜色还是限制为2?我问是因为 Unity 游戏引擎似乎在 COLOR1 之后停止工作,例如 COLOR2 不起作用。好吧,多亏了你,我至少可以输出两次。我要移植的着色器之一需要我对顶点着色器中的顶点颜色执行一些数学运算 4 次,并将它们的不同结果输出到像素着色器。 Maya cgfx 很好,因为它支持多种颜色集,因此可以采用 COLOR4 等。但另一方面,Unity ......似乎只采用 COLOR,COLOR1
    • 抱歉,不是统一方面的专家。寻找每一个可能的辅助流。如果你不将它们用于其他东西,也许你可以将 Color2 打包成切线/副法线数组。
    • 好的,没问题。能够输出它两次对我有很大帮助!我也会考虑在其他数组中打包
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    相关资源
    最近更新 更多