PostShadow.vert 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #import "Common/ShaderLib/Skinning.glsllib"
  2. uniform mat4 m_LightViewProjectionMatrix0;
  3. uniform mat4 m_LightViewProjectionMatrix1;
  4. uniform mat4 m_LightViewProjectionMatrix2;
  5. uniform mat4 m_LightViewProjectionMatrix3;
  6. uniform mat4 g_WorldViewProjectionMatrix;
  7. uniform mat4 g_WorldMatrix;
  8. uniform mat4 g_ViewMatrix;
  9. uniform vec3 m_LightPos;
  10. varying vec4 projCoord0;
  11. varying vec4 projCoord1;
  12. varying vec4 projCoord2;
  13. varying vec4 projCoord3;
  14. #ifdef POINTLIGHT
  15. uniform mat4 m_LightViewProjectionMatrix4;
  16. uniform mat4 m_LightViewProjectionMatrix5;
  17. varying vec4 projCoord4;
  18. varying vec4 projCoord5;
  19. varying vec4 worldPos;
  20. #else
  21. #ifndef PSSM
  22. uniform vec3 m_LightPos;
  23. uniform vec3 m_LightDir;
  24. varying float lightDot;
  25. #endif
  26. #endif
  27. #ifdef PSSM
  28. varying float shadowPosition;
  29. #endif
  30. varying vec3 lightVec;
  31. varying vec2 texCoord;
  32. attribute vec3 inPosition;
  33. #ifdef DISCARD_ALPHA
  34. attribute vec2 inTexCoord;
  35. #endif
  36. const mat4 biasMat = mat4(0.5, 0.0, 0.0, 0.0,
  37. 0.0, 0.5, 0.0, 0.0,
  38. 0.0, 0.0, 0.5, 0.0,
  39. 0.5, 0.5, 0.5, 1.0);
  40. void main(){
  41. vec4 modelSpacePos = vec4(inPosition, 1.0);
  42. #ifdef NUM_BONES
  43. Skinning_Compute(modelSpacePos);
  44. #endif
  45. gl_Position = g_WorldViewProjectionMatrix * modelSpacePos;
  46. #ifndef POINTLIGHT
  47. #ifdef PSSM
  48. shadowPosition = gl_Position.z;
  49. #endif
  50. vec4 worldPos=vec4(0.0);
  51. #endif
  52. // get the vertex in world space
  53. worldPos = g_WorldMatrix * modelSpacePos;
  54. #ifdef DISCARD_ALPHA
  55. texCoord = inTexCoord;
  56. #endif
  57. // populate the light view matrices array and convert vertex to light viewProj space
  58. projCoord0 = biasMat * m_LightViewProjectionMatrix0 * worldPos;
  59. projCoord1 = biasMat * m_LightViewProjectionMatrix1 * worldPos;
  60. projCoord2 = biasMat * m_LightViewProjectionMatrix2 * worldPos;
  61. projCoord3 = biasMat * m_LightViewProjectionMatrix3 * worldPos;
  62. #ifdef POINTLIGHT
  63. projCoord4 = biasMat * m_LightViewProjectionMatrix4 * worldPos;
  64. projCoord5 = biasMat * m_LightViewProjectionMatrix5 * worldPos;
  65. #else
  66. #ifndef PSSM
  67. vec3 lightDir = worldPos.xyz - m_LightPos;
  68. lightDot = dot(m_LightDir,lightDir);
  69. #endif
  70. #endif
  71. }