为什么我不能使用多个骨骼分支进行蒙皮?

时间:2015-07-16 17:59:33

标签: opengl matrix glsl skinning

我目前在做GLSL Skinning。 我从FBX导入了我的数据,我有骨骼层次结构,绑定骨骼矩阵(TransformLink)和骨骼的当前世界空间位置。

着色器就像:

"void main(){\n"
"mat4   matPose  =bonePoseMatrices[int(a_boneIndices.x)]* a_boneWeights.x;\n"
"       matPose +=bonePoseMatrices[int(a_boneIndices.y)]* a_boneWeights.y;\n"
"       matPose +=bonePoseMatrices[int(a_boneIndices.z)]* a_boneWeights.z;\n"
"       matPose +=bonePoseMatrices[int(a_boneIndices.w)]* a_boneWeights.w;\n"

"mat4   matTransform  =boneMatrices[int(a_boneIndices.x)]*a_boneWeights.x;\n"
"       matTransform +=boneMatrices[int(a_boneIndices.y)]*a_boneWeights.y;\n"
"       matTransform +=boneMatrices[int(a_boneIndices.z)]*a_boneWeights.z;\n"
"       matTransform +=boneMatrices[int(a_boneIndices.w)]*a_boneWeights.w;\n"

"  mat4 btMatrix=   (matTransform*matPose); \n"
"  gl_Position=  modelviewprojectionMat * btMatrix * vec4(a_position,1.0);\n"                       
"    v_texCoord   = a_texCoord;\n"
"    v_position   = modelviewMat * btMatrix * vec4(a_position, 1.0);\n"

正如您所看到的,这是一个经典的蒙皮着色器,就像谷歌搜索一样。

虽然这对于像“退化树”这样的“蛇”(弯曲块的完美动画)可以正常工作,但它不适用于第二个分支(像模型一样的Y字母)。

骨骼通过将它们的模型矩阵与父矩阵相乘来获得它们的世界矩阵,并且Root没有父级,因为顶点将乘以网格模型矩阵。

为什么它不适用于像层次结构一样的树?

0 个答案:

没有答案