如何仅通过发送一次数据使着色器淡入淡出?

时间:2018-09-12 15:28:33

标签: opengl shader

我很难仅使用着色器将正方形渐变为黑色。我正在使用结合C ++和Qt的OpenGL。我需要做的是一次将顶点列表发送到GPU,并且只进行一次绘制调用。使用那个顶点列表,我需要正方形在一定时间内逐渐变黑。仅使用OpenGL着色器可以做到这一点吗?我不想在CPU端执行此操作,因为它是大型应用程序的一部分,并且速度非常慢。如何使着色器褪色而不发送新的褪色值?

1 个答案:

答案 0 :(得分:0)

在片段着色器中可以轻松实现淡出效果。

您在CPU中有一个计时器。每次触发时,您都会减小变数let serialisedForm = $("#createProposal").serializeArray() .reduce((a, x) => ({ ...a, [x.name]: parseInt(x.value, 10); }), {}); ,这表示您希望在窗口中看到多少个完整的“白色”(而不是完整的黑色)。将该值设置为[0,1.0]。

每次触发计时器时,您只需绑定VAO并调用remainingPercent,而无需再次填充缓冲区。并调用swapbuffers。

您将glDrawXX的值remainingPercent传递给着色器。最后一步是将当前颜色与全黑混合均匀的量。像这样:

glUniform