Browse Source

Transform the vertex normals by the animated matrix (#4646)

Jeffery Myers 8 tháng trước cách đây
mục cha
commit
f355d6f1db
1 tập tin đã thay đổi với 13 bổ sung1 xóa
  1. 13 1
      examples/models/resources/shaders/glsl330/skinning.vs

+ 13 - 1
examples/models/resources/shaders/glsl330/skinning.vs

@@ -6,16 +6,19 @@
 in vec3 vertexPosition;
 in vec2 vertexTexCoord;
 in vec4 vertexColor;
+in vec3 vertexNormal;
 in vec4 vertexBoneIds;
 in vec4 vertexBoneWeights;
 
 // Input uniform values
 uniform mat4 mvp;
+uniform mat4 matNormal;
 uniform mat4 boneMatrices[MAX_BONE_NUM];
 
 // Output vertex attributes (to fragment shader)
 out vec2 fragTexCoord;
 out vec4 fragColor;
+out vec3 fragNormal;
 
 void main()
 {
@@ -29,9 +32,18 @@ void main()
         vertexBoneWeights.y*(boneMatrices[boneIndex1]*vec4(vertexPosition, 1.0)) + 
         vertexBoneWeights.z*(boneMatrices[boneIndex2]*vec4(vertexPosition, 1.0)) + 
         vertexBoneWeights.w*(boneMatrices[boneIndex3]*vec4(vertexPosition, 1.0));
-    
+
+    vec4 skinnedNormal =
+        vertexBoneWeights.x*(boneMatrices[boneIndex0]*vec4(vertexNormal, 0.0)) +
+        vertexBoneWeights.y*(boneMatrices[boneIndex1]*vec4(vertexNormal, 0.0)) + 
+        vertexBoneWeights.z*(boneMatrices[boneIndex2]*vec4(vertexNormal, 0.0)) + 
+        vertexBoneWeights.w*(boneMatrices[boneIndex3]*vec4(vertexNormal, 0.0));
+    skinnedNormal.w = 0.0;
+
     fragTexCoord = vertexTexCoord;
     fragColor = vertexColor;
 
+    fragNormal = normalize(vec3(matNormal*skinnedNormal));
+
     gl_Position = mvp*skinnedPosition;
 }