catapult.vert 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #version 330 core
  2. layout(location = 0) in vec3 a_position;
  3. layout(location = 1) in vec3 a_normal;
  4. layout(location = 2) in vec2 a_texCoord;
  5. layout(location = 3) in vec4 a_instanceModelCol0;
  6. layout(location = 4) in vec4 a_instanceModelCol1;
  7. layout(location = 5) in vec4 a_instanceModelCol2;
  8. layout(location = 6) in vec4 a_instanceColorAlpha;
  9. uniform mat4 u_mvp;
  10. uniform mat4 u_model;
  11. uniform mat4 u_viewProj;
  12. uniform bool u_instanced;
  13. out vec3 v_normal;
  14. out vec2 v_texCoord;
  15. out vec3 v_worldPos;
  16. out vec3 v_instanceColor;
  17. out float v_instanceAlpha;
  18. out float v_materialRegion;
  19. void main() {
  20. mat4 model;
  21. if (u_instanced) {
  22. model = mat4(vec4(a_instanceModelCol0.xyz, 0.0),
  23. vec4(a_instanceModelCol1.xyz, 0.0),
  24. vec4(a_instanceModelCol2.xyz, 0.0),
  25. vec4(a_instanceModelCol0.w, a_instanceModelCol1.w,
  26. a_instanceModelCol2.w, 1.0));
  27. v_instanceColor = a_instanceColorAlpha.rgb;
  28. v_instanceAlpha = a_instanceColorAlpha.a;
  29. } else {
  30. model = u_model;
  31. v_instanceColor = vec3(0.0);
  32. v_instanceAlpha = 1.0;
  33. }
  34. vec4 worldPos4 = model * vec4(a_position, 1.0);
  35. gl_Position = u_viewProj * worldPos4;
  36. v_normal = mat3(model) * a_normal;
  37. v_texCoord = a_texCoord;
  38. v_worldPos = worldPos4.xyz;
  39. if (v_worldPos.y < 0.25) {
  40. v_materialRegion = 0.0;
  41. } else if (v_worldPos.y < 0.55) {
  42. v_materialRegion = 1.0;
  43. } else {
  44. v_materialRegion = 2.0;
  45. }
  46. }