Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
OpenGL:骨骼动画,为什么在使用GPU时需要反向绑定姿势?_Opengl_Glsl_Skeletal Mesh - Fatal编程技术网

OpenGL:骨骼动画,为什么在使用GPU时需要反向绑定姿势?

OpenGL:骨骼动画,为什么在使用GPU时需要反向绑定姿势?,opengl,glsl,skeletal-mesh,Opengl,Glsl,Skeletal Mesh,我用软件蒙皮实现了一个MD5加载程序。md5中的绑定姿势是最终的绝对位置和旋转,您只需计算与关节相关的权重 我试图实现GPU蒙皮,但我在一个点上卡住了。既然这些坐标是最终坐标,为什么我不能将我的3d向量和四元数转换成矩阵并上传到着色器?正如我在这里读到的:,我需要用绑定姿势的倒数乘以我的骨架。但我不理解这一部分,因为我一直认为我需要做的唯一一件事就是将最终矩阵上传到GPU,然后计算剩余矩阵(权重总和等) 你能给我解释一下反向绑定姿势的行为吗?老实说,这篇文章有点太难理解了。似乎使用反向绑定姿势矩

我用软件蒙皮实现了一个MD5加载程序。md5中的绑定姿势是最终的绝对位置和旋转,您只需计算与关节相关的权重

我试图实现GPU蒙皮,但我在一个点上卡住了。既然这些坐标是最终坐标,为什么我不能将我的3d向量和四元数转换成矩阵并上传到着色器?正如我在这里读到的:,我需要用绑定姿势的倒数乘以我的骨架。但我不理解这一部分,因为我一直认为我需要做的唯一一件事就是将最终矩阵上传到GPU,然后计算剩余矩阵(权重总和等)


你能给我解释一下反向绑定姿势的行为吗?

老实说,这篇文章有点太难理解了。似乎使用反向绑定姿势矩阵将顶点变换为骨骼的局部坐标系


这是必要的,因为骨骼的变换是局部的(相对于其父关节)。因此,为了给顶点设置动画,必须将其变换为骨骼的局部坐标系,计算骨骼的局部变换并将其变换回世界系统。

作为该文章的原始作者,我将尝试解释与反向绑定姿势相乘的作用:

“反向绑定姿势”基本上“撤消”已在绑定姿势中应用于模型的任何变换

你可以这样想: 如果将标识矩阵应用于模型中的每个关节,则得到的是绑定姿势中的模型(您可以通过发送一个填充标识矩阵的骨架帧来尝试此操作。如果结果是绑定姿势,则说明操作正确)

如果将绑定姿势矩阵(未反转)应用于模型中的每个关节,则会得到意大利面,因为将应用绑定姿势两次

因此,要修复意大利面模型,只需将生成的关节变换乘以反向绑定姿势即可“撤消”已应用于模型的变换


我希望这能澄清一点…

在那段时间里,我想我理解了背后的想法。我们已经上传了绑定姿势的顶点,我只需要根据当前骨架变换它们。由于我的所有顶点都已在世界空间中,我需要将新骨架的绝对矩阵转换为关节空间,因为我需要偏移量,然后将结果与我的顶点相乘,最后与modelview矩阵相乘。