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