使用 OpenGL 插入数据缓冲区?

Interpolate data buffers using 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;
}