使用 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;
}
相关文章:
- 多线程和共享资源:使用C++定期将数据从缓冲区(数据结构)复制到文件
- OpenGL:使用指向静态数据的指针数组传递缓冲区数据
- 提取肮脏的RGB像素缓冲区数据Directx
- 如何使用模板函数从缓冲区(T* 数据数组)创建 cv::Mat
- 将缓冲区数据解析为结构
- glReadPixels更改缓冲区数据
- OpenGL + 无法使用缓冲区子数据更新缓冲区数据
- 与缓冲区数据匹配的 C++ 字符串模式
- 如何在使用FFmpeg写入mp4文件时将缓冲区数据刷新到磁盘
- 为什么boost::asio::读取缓冲区数据大小小于读取大小
- 使用C++AMP读取缓冲区数据
- DX11正在丢失实例缓冲区数据
- 是否可以在没有完全定义着色器的情况下测试缓冲区数据是否成功加载到GPU上?(C++、OpenGL 4.4、GLFW)
- opengl =中缓冲区数据的问题仅在我缓冲比需要更多的字节时绘制
- 谷歌协议缓冲区-对编码解码base64 char * c字符串协议缓冲区数据感到困惑
- 通过套接字发送协议缓冲区数据并确定类
- 通过原始缓冲区数据缩放和旋转纹理到另一个纹理上
- 仅修改VBO缓冲区数据的特定元素类型
- 在read()之前检查boost::asio缓冲区数据是否存在
- 从原始缓冲区数据创建Mat图像