使用 OpenGL 插值数据缓冲区?

Interpolate data buffers using OpenGL?

本文关键字:缓冲区 数据 插值 OpenGL 使用      更新时间:2023-10-16

我正在编写一个应用程序,该应用程序将两个网格(用作关键帧(的顶点加载到两个单独的 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;
}