X-Git-Url: https://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=pbrvert.glsl;h=775cebfb0f411c04aa80c10f195e1e31cad1308b;hp=ec37a9cf0f282e934bd1fa75beb39104c64befb1;hb=610bb8ddab4ec871cadfed0a0b66695b8fea41a4;hpb=a03f2bc751bbd7f91cbc2f52d2f0f6e753d6f776 diff --git a/pbrvert.glsl b/pbrvert.glsl index ec37a9c..775cebf 100644 --- a/pbrvert.glsl +++ b/pbrvert.glsl @@ -3,10 +3,15 @@ in vec3 pos; in vec3 unscaledNormal; in vec2 vTexCoord; +in ivec4 boneIds; +in vec4 boneWeights; + uniform mat4 model; uniform mat4 view; uniform mat4 projection; +uniform mat4 bones[16 + 1]; + out vec3 normal; out vec2 texCoords; @@ -15,10 +20,17 @@ out vec3 lightPos, viewPos, worldPos; void main() { texCoords = vTexCoord; - worldPos = vec3(model * vec4(pos, 1.f)); + mat4 boneTrans = bones[boneIds.x] * boneWeights.x; + boneTrans += bones[boneIds.y] * boneWeights.y; + boneTrans += bones[boneIds.z] * boneWeights.z; + boneTrans += bones[boneIds.w] * boneWeights.w; + + mat4 bonedModel = boneTrans * model; + + worldPos = vec3(bonedModel * vec4(pos, 1.f)); - normal = mat3(transpose(inverse(model))) * unscaledNormal; + normal = mat3(transpose(inverse(bonedModel))) * unscaledNormal; - gl_Position = projection * view * model * vec4(pos, 1.f); + gl_Position = projection * view * bonedModel * vec4(pos, 1.f); }