sprites.vertex.fx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Attributes
  2. attribute vec3 position;
  3. attribute vec4 options;
  4. attribute vec4 cellInfo;
  5. attribute vec4 color;
  6. // Uniforms
  7. uniform vec2 textureInfos;
  8. uniform mat4 view;
  9. uniform mat4 projection;
  10. // Output
  11. varying vec2 vUV;
  12. varying vec4 vColor;
  13. #ifdef FOG
  14. varying float fFogDistance;
  15. #endif
  16. void main(void) {
  17. vec3 viewPos = (view * vec4(position, 1.0)).xyz;
  18. vec3 cornerPos;
  19. float angle = options.x;
  20. float size = options.y;
  21. vec2 offset = options.zw;
  22. vec2 uvScale = textureInfos.xy;
  23. cornerPos = vec3(offset.x - 0.5, offset.y - 0.5, 0.) * size;
  24. // Rotate
  25. vec3 rotatedCorner;
  26. rotatedCorner.x = cornerPos.x * cos(angle) - cornerPos.y * sin(angle);
  27. rotatedCorner.y = cornerPos.x * sin(angle) + cornerPos.y * cos(angle);
  28. rotatedCorner.z = 0.;
  29. // Position
  30. viewPos += rotatedCorner;
  31. gl_Position = projection * vec4(viewPos, 1.0);
  32. // Color
  33. vColor = color;
  34. // Texture
  35. vec2 uvOffset = vec2(abs(offset.x - cellInfo.x), 1.0 - abs(offset.y - cellInfo.y));
  36. vUV = (uvOffset + cellInfo.zw) * uvScale;
  37. // Fog
  38. #ifdef FOG
  39. fFogDistance = viewPos.z;
  40. #endif
  41. }