GameCode4_vert.glsl 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #version 460 core
  2. //--------------------------------------------------------------------------------------
  3. // Globals
  4. //--------------------------------------------------------------------------------------
  5. layout(std140, binding = 0) uniform cbMatrices
  6. {
  7. mat4 g_mWorldViewProjection;
  8. mat4 g_mWorld;
  9. };
  10. layout(std140, binding = 1) uniform cbLights
  11. {
  12. vec4 g_LightDiffuse[8]; // Light's diffuse color - up to 8 lights
  13. vec4 g_LightDir[8]; // Light's direction in world space
  14. vec4 g_fAmbient;
  15. int g_nNumLights;
  16. };
  17. layout(std140, binding = 2) uniform cbObjectColors
  18. {
  19. vec4 g_vDiffuseObjectColor;
  20. vec4 g_vAmbientObjectColor;
  21. bool g_bHasTexture;
  22. };
  23. //--------------------------------------------------------------------------------------
  24. // Input / Output structures
  25. //--------------------------------------------------------------------------------------
  26. layout(location = 0) in vec3 position;
  27. layout(location = 1) in vec3 vNormal;
  28. layout(location = 2) in vec2 vertex_uv;
  29. out vec2 uv;
  30. out vec4 diffuse;
  31. void main() {
  32. vec3 vNormalWorldSpace;
  33. float dotProduct;
  34. vec4 dottedLightColor;
  35. gl_Position = g_mWorldViewProjection * vec4(position, 1.0);
  36. vNormalWorldSpace = mat3(g_mWorld) * vNormal;
  37. uv = vertex_uv;
  38. // Compute simple directional lighting equation
  39. vec4 vTotalLightDiffuse = vec4(0,0,0,0);
  40. for(int i=0; i<g_nNumLights; i++)
  41. {
  42. dotProduct = dot(vNormalWorldSpace, g_LightDir[i].xyz);
  43. dotProduct = max(0.0f, dotProduct);
  44. dottedLightColor = g_LightDiffuse[i] * dotProduct;
  45. vTotalLightDiffuse += dottedLightColor;
  46. }
  47. diffuse.rgb = (g_vDiffuseObjectColor * vTotalLightDiffuse +
  48. g_vAmbientObjectColor * g_fAmbient).rgb;
  49. diffuse.a = g_vDiffuseObjectColor.a;
  50. }