Animation WebGL/GPU蒙皮/骨骼动画

Animation WebGL/GPU蒙皮/骨骼动画,animation,opengl-es,webgl,collada,skeletal-mesh,Animation,Opengl Es,Webgl,Collada,Skeletal Mesh,令人沮丧的是,我接近于在WebGL中使用骨骼动画 背景 我有一个免费得到的a。我在一个Collada文件中下载了整个东西。我编写了一个解析器来获取所有顶点、法线、关节影响指数/权重和关节矩阵。通过执行以下操作,我能够以绑定姿势渲染角色 joints[i].skinning_matrix = MatrixMultiply(joints[i].inverse_bind_pose_matrix, joints[i].world_matrix); 其中,关节的世界矩阵是关节的绑定姿态矩阵乘以其父关节的

令人沮丧的是,我接近于在WebGL中使用骨骼动画

背景 我有一个免费得到的a。我在一个Collada文件中下载了整个东西。我编写了一个解析器来获取所有顶点、法线、关节影响指数/权重和关节矩阵。通过执行以下操作,我能够以绑定姿势渲染角色

joints[i].skinning_matrix = MatrixMultiply(joints[i].inverse_bind_pose_matrix, joints[i].world_matrix);
其中,关节的世界矩阵是关节的绑定姿态矩阵乘以其父关节的世界矩阵。通过以下操作,我得到了逆_bind_pose_矩阵:

joints[i].inverse_bind_pose_matrix = MatrixInvert(joints[i].world_matrix);
所以实际上,渲染绑定姿势中的角色只是将身份矩阵传递给着色器,所以可能我根本没有正确地完成这一部分。但是,我计算的反向绑定姿势矩阵与Collada文件提供的矩阵几乎相同,因此我非常确定这些矩阵是好的

这是我的模特在捆绑姿势:

问题 一旦我继续并尝试使用动画的单个帧计算蒙皮矩阵(我随机选择了第10帧),它仍然像一个男人,但肯定是出了问题

我使用的是我第一次计算的逆矩阵。我使用了一个新的世界矩阵,通过将每个关节的关键帧/动画矩阵乘以其父关节的新世界矩阵来计算

在我的整个代码库中,我没有做任何转置,尽管我想我已经尝试过转置几乎所有矩阵的组合,但都没有用

以下是我的模型在动画第10帧中的姿势:

一些相关代码 顶点着色器:

attribute float aBoneIndex1;
// up to aBoneIndex5

attribute float aBoneWeight1;
// up to aBoneWeight5

uniform mat4 uBoneMatrices[52];

void main(void) {
  vec4 vertex = vec4(0.0, 0.0, 0.0, 0.0);
  vertex += aBoneWeight1 * vec4(uBoneMatrices[int(aBoneIndex1)] * aPosition);
  vertex += aBoneWeight2 * vec4(uBoneMatrices[int(aBoneIndex2)] * aPosition);
  vertex += aBoneWeight3 * vec4(uBoneMatrices[int(aBoneIndex3)] * aPosition);
  vertex += aBoneWeight4 * vec4(uBoneMatrices[int(aBoneIndex4)] * aPosition);
  vertex += aBoneWeight5 * vec4(uBoneMatrices[int(aBoneIndex5)] * aPosition);

  // normal/lighting part

  // the "/ 90.0" simply scales the model down, problem persists without it.
  gl_Position = uPMatrix * uMVMatrix * vec4(vertex.xyz / 90.0, 1.0);
}

您可以在上看到我的解析器的全部内容(如果您真的想…),并且可以实时查看模型。

Github说404。你曾经解决过这个问题吗?@TN:是的,你可以在上看到现场动画,在上看到github repo。如果你解决了这个问题,你应该发布并接受答案,以方便其他有同样问题的读者。@ArtOfWarfare:对不起,我不记得是什么问题了。我只记得几天来我一直在小心翼翼地玩弄它,并改变我将事物乘以的顺序等等。。。同样,源代码在github上-参见上面的评论