我目前在做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没有父级,因为顶点将乘以网格模型矩阵。
为什么它不适用于像层次结构一样的树?