//Vertex Shader #version 430 core layout (location = 0) in vec3 aPos; layout (location = 1) in vec3 aNormal; layout (location = 2) in vec4 aWeights; layout (location = 3) in ivec4 aIndex; uniform mat4 transform; uniform mat4 model; uniform mat4 view; uniform mat4 projection; const int MAX_BONES = 100; uniform mat4 bones[MAX_BONES]; uniform int hasBones; uniform int numBones; out vec3 Normal; out vec3 FragPos; out vec2 TexCoords; void main() { if(hasBones == 1){ //mat4 BoneTransform; //for(int i = 0; i < MAX_BONES; i++){ // if(i < numBones){ // BoneTransform += bones[i] * aWeights[i]; // } //} mat4 BoneTransform; BoneTransform = mat4( 1.0,0.0,0.0,0.0, 0.0,1.0,0.0,0.0, 0.0,0.0,1.0,0.0, 0.0,0.0,0.0,1.0); //BoneTransform = BoneTransform * mat4( // 1.0,0.0,0.0,0.0, // 0.0,1.0,0.0,0.0, // 0.0,0.0,2.0,0.0, // 0.0,0.0,0.0,1.0); BoneTransform = BoneTransform * bones[aIndex[0]] * aWeights[0]; BoneTransform += BoneTransform * bones[aIndex[1]] * aWeights[1]; BoneTransform += BoneTransform * bones[aIndex[2]] * aWeights[2]; BoneTransform += BoneTransform * bones[aIndex[3]] * aWeights[3]; //BoneTransform += bones[aIndex[0]] * 1.0; //BoneTransform += bones[aIndex[1]] * aWeights[1]; //BoneTransform += bones[aIndex[2]] * aWeights[2]; //BoneTransform += bones[aIndex[3]] * aWeights[3]; gl_Position = projection * view * model * BoneTransform * vec4(aPos, 1.0); } else { gl_Position = projection * view * model * vec4(aPos, 1.0); } FragPos = vec3(model * vec4(aPos, 1.0)); Normal = vec3(vec4(aNormal, 1.0)); TexCoords = vec2(0.5, 0.5); }