skinning.vs 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #version 330
  2. #define MAX_BONE_NUM 128
  3. // Input vertex attributes
  4. in vec3 vertexPosition;
  5. in vec2 vertexTexCoord;
  6. in vec4 vertexColor;
  7. in vec4 vertexBoneIds;
  8. in vec4 vertexBoneWeights;
  9. // Input uniform values
  10. uniform mat4 mvp;
  11. uniform mat4 boneMatrices[MAX_BONE_NUM];
  12. // Output vertex attributes (to fragment shader)
  13. out vec2 fragTexCoord;
  14. out vec4 fragColor;
  15. void main()
  16. {
  17. int boneIndex0 = int(vertexBoneIds.x);
  18. int boneIndex1 = int(vertexBoneIds.y);
  19. int boneIndex2 = int(vertexBoneIds.z);
  20. int boneIndex3 = int(vertexBoneIds.w);
  21. vec4 skinnedPosition =
  22. vertexBoneWeights.x*(boneMatrices[boneIndex0]*vec4(vertexPosition, 1.0)) +
  23. vertexBoneWeights.y*(boneMatrices[boneIndex1]*vec4(vertexPosition, 1.0)) +
  24. vertexBoneWeights.z*(boneMatrices[boneIndex2]*vec4(vertexPosition, 1.0)) +
  25. vertexBoneWeights.w*(boneMatrices[boneIndex3]*vec4(vertexPosition, 1.0));
  26. fragTexCoord = vertexTexCoord;
  27. fragColor = vertexColor;
  28. gl_Position = mvp*skinnedPosition;
  29. }