Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGl3及更高版本中两帧之间的线性插值_C++_Opengl_Glsl - Fatal编程技术网

C++ OpenGl3及更高版本中两帧之间的线性插值

C++ OpenGl3及更高版本中两帧之间的线性插值,c++,opengl,glsl,C++,Opengl,Glsl,我有两个帧,即两个由相等数量的顶点组成的网格,我正在尝试编写一个顶点着色器,该着色器将线性插值以将第1帧变形为第2帧。我正在阅读一个教程,该教程展示了如何在较旧版本的OpenGL中实现这一点。算法基本上是: GLBegin For each vertex in frame 1 Send equivalent vertex to uniform variable in vertex shader from frame 2 Send vertex from frame 1 to verte

我有两个帧,即两个由相等数量的顶点组成的网格,我正在尝试编写一个顶点着色器,该着色器将线性插值以将第1帧变形为第2帧。我正在阅读一个教程,该教程展示了如何在较旧版本的OpenGL中实现这一点。算法基本上是:

GLBegin
 For each vertex in frame 1
  Send equivalent vertex to uniform variable in vertex shader from frame 2
  Send vertex from frame 1 to vertex shader
  (shader uses mix() to linearly interpolate between the two XYZ values)
GLEnd

但这不是OpenGL3+中的工作方式。有人能帮我想出一种算法,在该算法中,我仍然可以使用顶点着色器中的混合来创建两个网格/帧之间的变形?

最简单的方法是使用两组位置属性和一个统一的混合因子(介于0和1之间),然后通过GLSL的混合函数使用混合因子在它们之间进行混合。当完全达到1.0时,可以切换回因子0,但现在只需更新顶点属性指针即可使用第二个网格作为第一组

我相信OpenGL 3+与OpenGL旧版本向后兼容,因此,为什么不按照示例所示实现它呢。如果它能工作,那么它可以兼容更多的系统!!!这就是我上面描述的算法。我想知道如何在OpenGL3+中实现这一点,在OpenGL3+中,您必须处理顶点缓冲区,而不是使用GlBegin和End设置状态。@CollinSchupman:实际上我已经告诉过您如何做到这一点。使用两个顶点属性,这就是所有需要的