forward.vs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #version 330 core
  2. layout (location = 0) in vec3 in_position;
  3. layout (location = 1) in vec2 in_uv;
  4. layout (location = 2) in vec3 in_normals;
  5. layout (location = 3) in vec4 in_tangents;
  6. layout (location = 4) in vec4 in_color;
  7. layout (location = 5) in vec4 in_boneindex;
  8. layout (location = 6) in vec4 in_boneweights;
  9. layout (location = 7) in mat4 in_instancematrix;
  10. out vec3 frag;
  11. out vec3 normal;
  12. out vec2 uv;
  13. out mat3 TBN;
  14. uniform mat4 u_view;
  15. uniform mat4 u_projection;
  16. uniform mat4 u_bone_matrix[200];
  17. uniform bool u_has_skeleton;
  18. void main()
  19. {
  20. mat4 transform = in_instancematrix;
  21. if (u_has_skeleton == true) {
  22. vec4 boneindex = in_boneindex*255.0;
  23. vec4 boneweights = in_boneweights*255.0;
  24. mat4 skeleton = u_bone_matrix[int(boneindex.x)] * boneweights.x +
  25. u_bone_matrix[int(boneindex.y)] * boneweights.y +
  26. u_bone_matrix[int(boneindex.z)] * boneweights.z +
  27. u_bone_matrix[int(boneindex.w)] * boneweights.w;
  28. transform = transform * skeleton;
  29. }
  30. vec4 v = u_projection * u_view * transform * vec4(in_position, 1.0);
  31. gl_Position = v;
  32. normal = mat3(transpose(inverse(u_view * transform))) * in_normals;
  33. frag = vec3(u_view * in_instancematrix * vec4(in_position, 1.0f));
  34. uv = in_uv;
  35. // calculate tbn matrix for normal mapping
  36. vec3 T = normalize(vec3(u_view * transform * vec4(in_tangents.xyz, 0.0)));
  37. vec3 B = normalize(vec3(u_view * transform * in_tangents));
  38. vec3 N = normalize(vec3(u_view * transform * vec4(in_normals, 0.0)));
  39. TBN = mat3(T, B, N);
  40. }