如何检查Cg中的数组元素是否为空? (Unity着色器开发)

时间:2016-12-01 00:11:51

标签: c# arrays unity3d cg

在我的着色器中,我声明了一个非序列化的float4s数组,并在元素上执行一段代码:

uniform float4 _HandPos[5];

v2f vert(appdata v) 
{
    float distH;

    for (float i = 0; i < _HandPos.Length; i++)
    {

         /*if element has not been assigned, assuming an empty element is NaN, 
         check distance between vertex and element*/
         if (!isnan(_HandPos[i]))
         {
             distH = distance(_HandPos[i], v.vertex);
         }
         //do something with distH here
    }
}

每一帧,C#脚本中的数组都会发送到_HandPos。它并不总是为所有5个元素发送值,所以我必须将空的元素过滤掉。在这里,我假设一个空元素是NaN,但这似乎不起作用。

1 个答案:

答案 0 :(得分:0)

如果您不在每帧中写入值,则会保留最后设置的值。或者,您可以使用与需要重新处理_HandPos元素相对应的int值数组。

请记住,GPU上的分支语句(例如if())通常会导致GPU执行两个分支然后丢弃一个值 - 所以如果这是一个优化,它可能不会去达到预期的效果。