X-Git-Url: https://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=pbrvert.glsl;fp=pbrvert.glsl;h=1cea9a8e24748fa82eb3752921e575c9d0fa544f;hp=ec37a9cf0f282e934bd1fa75beb39104c64befb1;hb=be8759aec179d6d7bed58732134673870c596b4f;hpb=511a2c92fcb9dda82dd5d38b91ea03790d0cb7b2 diff --git a/pbrvert.glsl b/pbrvert.glsl index ec37a9c..1cea9a8 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); }