Ei kuvausta

normalmap.vert 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #version 450
  2. #extension GL_ARB_separate_shader_objects : enable
  3. #extension GL_ARB_shading_language_420pack : enable
  4. layout (location = 0) in vec3 inPos;
  5. layout (location = 1) in vec2 inUV;
  6. layout (location = 2) in vec3 inNormal;
  7. layout (location = 3) in vec3 inTangent;
  8. layout (location = 4) in vec3 inBiTangent;
  9. layout (binding = 0) uniform UBO
  10. {
  11. mat4 projection;
  12. mat4 model;
  13. mat4 normal;
  14. vec4 lightPos;
  15. vec4 cameraPos;
  16. } ubo;
  17. out gl_PerVertex
  18. {
  19. vec4 gl_Position;
  20. float gl_PointSize;
  21. };
  22. layout (location = 0) out vec2 outUV;
  23. layout (location = 1) out vec3 outLightVec;
  24. layout (location = 2) out vec3 outLightVecB;
  25. layout (location = 5) out vec3 outLightDir;
  26. layout (location = 6) out vec3 outViewVec;
  27. void main(void)
  28. {
  29. vec3 vertexPosition = vec3(ubo.model * vec4(inPos, 1.0));
  30. outLightDir = normalize(ubo.lightPos.xyz - vertexPosition);
  31. // Setup (t)angent-(b)inormal-(n)ormal matrix for converting
  32. // object coordinates into tangent space
  33. mat3 tbnMatrix;
  34. tbnMatrix[0] = mat3(ubo.normal) * inTangent;
  35. tbnMatrix[1] = mat3(ubo.normal) * inBiTangent;
  36. tbnMatrix[2] = mat3(ubo.normal) * inNormal;
  37. outLightVec.xyz = vec3(ubo.lightPos.xyz - vertexPosition.xyz) * tbnMatrix;
  38. vec3 lightDist = ubo.lightPos.xyz - inPos.xyz;
  39. outLightVecB.x = dot(inTangent.xyz, lightDist);
  40. outLightVecB.y = dot(inBiTangent.xyz, lightDist);
  41. outLightVecB.z = dot(inNormal, lightDist);
  42. outViewVec.x = dot(inTangent, inPos.xyz);
  43. outViewVec.y = dot(inBiTangent, inPos.xyz);
  44. outViewVec.z = dot(inNormal, inPos.xyz);
  45. outUV = inUV;
  46. gl_Position = ubo.projection * ubo.model * vec4(inPos, 1.0);
  47. }