使用OpenGL插值数据缓冲区?
问题描述:
我正在编写一个应用程序,将两个网格(用作关键帧)的顶点加载到两个单独的OpenGL浮点数据缓冲区中。这两个网格具有相同数量的顶点。使用OpenGL插值数据缓冲区?
我想通过使用这两个缓冲区之间的线性插值计算中间帧(我可以指定插值权重为0和1之间的值)。我目前正在CPU上执行插值,但我想将计算卸载到GPU,以便更快地计算中间帧。
有没有办法做到这一点只使用OpenGL(即不是OpenCL)?如果是这样,怎么样?
答
假设顶点在两个缓冲区中都以相同的顺序存储,您可以简单地将每个缓冲区绑定到顶点着色器中的属性。结合其间的统一控制从0(仅第一个缓冲区)到1(仅第二个缓冲区)的插值(我们称之为t),可以在写入gl_Position
之前执行线性插值。着色器可能看起来在某种程度上类似如下:
in vec4 buffer1; //Bind buffer1 to this attribute
in vec4 buffer2; //Bind buffer2 to this attribute
uniform float t; //Interpolation parameter between 0 and 1
void main()
{
gl_Position = (1 - t) * buffer1 + t * buffer2;
}
或['混合()'](https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/mix.xhtml)。 – genpfault
这可能是一个愚蠢的问题,但我如何将VBO绑定到着色器属性?我似乎无法找到如何。 –
你现在如何与你的一个VBO做到这一点?看看'glVertexAttribPointer'。 – BDL