useShadowMapInstancingVS.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. //this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
  2. static const char* useShadowMapInstancingVertexShader= \
  3. "#version 330 \n"
  4. "precision highp float;\n"
  5. "layout (location = 0) in vec4 position;\n"
  6. "layout (location = 1) in vec4 instance_position;\n"
  7. "layout (location = 2) in vec4 instance_quaternion;\n"
  8. "layout (location = 3) in vec2 uvcoords;\n"
  9. "layout (location = 4) in vec3 vertexnormal;\n"
  10. "layout (location = 5) in vec4 instance_color;\n"
  11. "layout (location = 6) in vec3 instance_scale;\n"
  12. "uniform mat4 ModelViewMatrix;\n"
  13. "uniform mat4 ProjectionMatrix;\n"
  14. "uniform mat4 DepthBiasModelViewProjectionMatrix;\n"
  15. "uniform mat4 MVP;\n"
  16. "uniform vec3 lightDirIn;\n"
  17. "out vec4 ShadowCoord;\n"
  18. "out Fragment\n"
  19. "{\n"
  20. " vec4 color;\n"
  21. "} fragment;\n"
  22. "out Vert\n"
  23. "{\n"
  24. " vec2 texcoord;\n"
  25. "} vert;\n"
  26. "vec4 quatMul ( in vec4 q1, in vec4 q2 )\n"
  27. "{\n"
  28. " vec3 im = q1.w * q2.xyz + q1.xyz * q2.w + cross ( q1.xyz, q2.xyz );\n"
  29. " vec4 dt = q1 * q2;\n"
  30. " float re = dot ( dt, vec4 ( -1.0, -1.0, -1.0, 1.0 ) );\n"
  31. " return vec4 ( im, re );\n"
  32. "}\n"
  33. "vec4 quatFromAxisAngle(vec4 axis, in float angle)\n"
  34. "{\n"
  35. " float cah = cos(angle*0.5);\n"
  36. " float sah = sin(angle*0.5);\n"
  37. " float d = inversesqrt(dot(axis,axis));\n"
  38. " vec4 q = vec4(axis.x*sah*d,axis.y*sah*d,axis.z*sah*d,cah);\n"
  39. " return q;\n"
  40. "}\n"
  41. "//\n"
  42. "// vector rotation via quaternion\n"
  43. "//\n"
  44. "vec4 quatRotate3 ( in vec3 p, in vec4 q )\n"
  45. "{\n"
  46. " vec4 temp = quatMul ( q, vec4 ( p, 0.0 ) );\n"
  47. " return quatMul ( temp, vec4 ( -q.x, -q.y, -q.z, q.w ) );\n"
  48. "}\n"
  49. "vec4 quatRotate ( in vec4 p, in vec4 q )\n"
  50. "{\n"
  51. " vec4 temp = quatMul ( q, p );\n"
  52. " return quatMul ( temp, vec4 ( -q.x, -q.y, -q.z, q.w ) );\n"
  53. "}\n"
  54. "out vec3 lightDir,normal,ambient;\n"
  55. "void main(void)\n"
  56. "{\n"
  57. " vec4 q = instance_quaternion;\n"
  58. " ambient = vec3(0.5,.5,0.5);\n"
  59. " \n"
  60. " vec4 worldNormal = (quatRotate3( vertexnormal,q));\n"
  61. " \n"
  62. " normal = normalize(worldNormal).xyz;\n"
  63. " lightDir = lightDirIn;\n"
  64. " \n"
  65. " \n"
  66. " vec4 localcoord = quatRotate3( position.xyz*instance_scale,q);\n"
  67. " vec4 vertexPos = MVP* vec4((instance_position+localcoord).xyz,1);\n"
  68. " gl_Position = vertexPos;\n"
  69. " ShadowCoord = DepthBiasModelViewProjectionMatrix * vec4((instance_position+localcoord).xyz,1);\n"
  70. " fragment.color = instance_color;\n"
  71. " vert.texcoord = uvcoords;\n"
  72. "}\n"
  73. ;