所以我有一种Z字形模式,如下所示。,由以下片段着色器创建:
uniform float time;
varying vec2 texture_coord;
void main()
{
float wav[10] = float[10](0,.1,.2,.1,0,-.1,-.2,-.1,0,.1);
//gl_FragColor = gl_Color;
float mod_time = mod(time, 1);
float x_pos = mod(texture_coord.x, 1.1);
float x_pos2 = x_pos * 10;
int index = int(x_pos2);
if(texture_coord.y < .5 + wav[index])
gl_FragColor = vec4(.7,.3,.3,1.0);
else
gl_FragColor = vec4(.3,.3,.3,1.0);
}
我希望通过使之字形向上移动来制作动画。
我的问题是,考虑到我使用数组从中位数创建偏移量,我将如何做到这一点?我不确定如何调整数组,以便在下一个动画步骤中,数组看起来像(.1,.2,.1,0, - 。1, - 。2, - 。1,0, 0.1)?
答案 0 :(得分:1)
有两种方法可以做到。您可以将偏移设置为数组的动画(可能是最简单的),也可以为数组本身设置动画。你已经传入了一个时间参数,所以你可以使用它,如下所示:
if (texture_coord.y < 0.5 + wav [ (index + (mod_time * 10)) % 10 ]) // Note you may have to calculate the "%" operator yourself
... etc. ...
或者你可以传入数组。要传入数组,只需获取数组第一个元素的统一位置,然后将其递增以用于以后的值。所以在你的源代码中,你可以这样做:
Fragment Shader:
uniform float wav [ 10 ];
... rest of fragment shader ...
源代码:
wavLoc = glGetUniformLocation (program, "wav");
offset++; // This starts at 0 and is incremented on each frame you want to advance the pattern
for (int i = 0; i < 10; i++)
{
glUniform1f (wavLoc + i, wavePattern [ (i + offset) % 10 ]);
}