2017-08-28 158 views
0

我正在编写一个应用程序,将两个网格(用作关键帧)的顶点加载到两个单独的OpenGL浮点数据缓冲区中。这两个网格具有相同数量的顶点。使用OpenGL插值数据缓冲区?

我想通过使用这两个缓冲区之间的线性插值计算中间帧(我可以指定插值权重为0和1之间的值)。我目前正在CPU上执行插值,但我想将计算卸载到GPU,以便更快地计算中间帧。

有没有办法做到这一点只使用OpenGL(即不是OpenCL)?如果是这样,怎么样?

回答

5

假设顶点在两个缓冲区中都以相同的顺序存储,您可以简单地将每个缓冲区绑定到顶点着色器中的属性。结合其间的统一控制从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; 
} 
+6

或['混合()'](https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/mix.xhtml)。 – genpfault

+0

这可能是一个愚蠢的问题,但我如何将VBO绑定到着色器属性?我似乎无法找到如何。 –

+1

你现在如何与你的一个VBO做到这一点?看看'glVertexAttribPointer'。 – BDL