我正在编写一个应用程序,将两个网格的顶点(用作关键帧)加载到两个单独的OpenGL浮点数据缓冲区中 . 两个网格具有相同数量的顶点 .
我想通过在这两个缓冲区之间使用线性插值来计算中间帧(我可以将插值加权指定为0到1之间的值) . 我目前正在CPU上执行插值,但我想将计算卸载到GPU以便更快地计算中间帧 .
有没有办法只使用OpenGL(即不是OpenCL)?如果是这样,怎么样?
假设顶点在两个缓冲区中以相同的顺序存储,您可以简单地将每个缓冲区绑定到顶点着色器中的属性 . 结合统一控制插值(让我们称之为t)从0(仅第一个缓冲区)到1(仅第二个缓冲区),您可以在写入 gl_Position 之前执行线性插值 . 着色器可能看起来像下面这样:
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; }
1 回答
假设顶点在两个缓冲区中以相同的顺序存储,您可以简单地将每个缓冲区绑定到顶点着色器中的属性 . 结合统一控制插值(让我们称之为t)从0(仅第一个缓冲区)到1(仅第二个缓冲区),您可以在写入
gl_Position
之前执行线性插值 . 着色器可能看起来像下面这样: