You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
881 B

  1. #version 450 core
  2. #pragma include ./tail_update_shared.glsl
  3. #pragma include ../misc/global.glsl
  4. in VertexData vertexData[];
  5. layout (points) in;
  6. layout (points, max_vertices = 1) out;
  7. out vec2 outTail0;
  8. out vec2 outTail1;
  9. out vec2 outTail2;
  10. out vec2 outTail3;
  11. out vec2 outTail4;
  12. out vec2 outTail5;
  13. vec2 move(vec2 ref, vec2 point) {
  14. vec2 dir = ref - point;
  15. float len = length(dir);
  16. float diff = max(len - TAIL_LEN, 0.0);
  17. float force = min(TAIL_FORCE * diff * uGlobal.delta, diff);
  18. return point + normalize(dir) * force;
  19. }
  20. void main() {
  21. VertexData d = vertexData[0];
  22. outTail0 = d.pos;
  23. outTail1 = move(d.pos, d.tail[1]);
  24. outTail2 = move(d.tail[1], d.tail[2]);
  25. outTail3 = move(d.tail[2], d.tail[3]);
  26. outTail4 = move(d.tail[3], d.tail[4]);
  27. outTail5 = move(d.tail[4], d.tail[5]);
  28. EmitVertex();
  29. EndPrimitive();
  30. }