opengl 骨骼动画的意外transformationMatrix和偏移矩阵

cwtwac6a  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(207)

我使用的:

  • 简单地从混合器导入. fbx文件
  • OpenGL渲染
  • 用于处理矩阵和向量的glm lib

我正在尝试制作骨骼动画。我没有直接将. fbx文件读入程序,而是首先将其转换为二进制文件。我试图理解transformationMatrix和offsetMatrix应该如何工作。以下是我所理解的:为了以后能够运行动画,我们需要找到一种方法,使移动的Bone不仅影响其顶点,还影响与其相连的骨骼。因此,我们的想法是使用变换矩阵,它描述了骨骼或节点的坐标系,我们沿着这些路径乘到骨骼,然后乘以offsetMatrix,返回到对象空间。我想现在我尝试了所有可能的组合,将这些相乘,但我总是出错。然后我看了几次这些值,对我来说,这根本不明显应该如何工作。如果我说错了请纠正我,但我的期望是,当在BindPose中使用来自Assimp导入的offsetMatrices和transformationMatrices时,我必须得到一个单位矩阵,因为我希望我的模型处于绑定姿势,就像没有这些矩阵一样。这些是从所有节点到第一个骨骼的变换矩阵:
根节点是标识
电枢m变换矩阵:

100 0 0 0 
0 -1.6e-05 100 0
0 -100 -1.629e-05 0
0 0 0 1

骨m转换矩阵:
我期望这两个相乘后得到恒等式 * 100。
对应骨的mOffsetMatrix:

0.38 0 0 0 
0 0 -1 0 
0 0.28 0 0
0 0 1.67 1

在我看来,这对我一点帮助都没有,所以要么我对单位矩阵结果的期望是错误的,要么偏移矩阵是错误的。
如果你认为我的模型看起来很重要:

编辑:忘了提一下:来读取我使用的aiMatrix4x4

static inline glm::mat4 mat4_cast(const aiMatrix4x4& m) { return glm::transpose(glm::make_mat4(&m.a1)); }

但是我在这篇报告中写的transformationMatrix是直接来自场景的,所以只有offsetMatrix被转置了,但是这并没有改变什么。

sr4lhrrt

sr4lhrrt1#

我发现了问题,问题是我还必须从meshSpace变换回对象空间,偏移矩阵是变换矩阵的逆矩阵,乘以变换矩阵的逆矩阵,再乘以不同节点上的Mesh的变换矩阵的逆矩阵。

相关问题