fluent.vertex.fx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. precision highp float;
  2. // Attributes
  3. attribute vec3 position;
  4. attribute vec3 normal;
  5. attribute vec2 uv;
  6. // Uniforms
  7. uniform mat4 world;
  8. uniform mat4 viewProjection;
  9. varying vec2 vUV;
  10. #ifdef BORDER
  11. varying vec2 scaleInfo;
  12. uniform float borderWidth;
  13. uniform vec3 scaleFactor;
  14. #endif
  15. void main(void) {
  16. vUV = uv;
  17. #ifdef BORDER
  18. vec3 scale = scaleFactor;
  19. float minScale = min(min(scale.x, scale.y), scale.z);
  20. float maxScale = max(max(scale.x, scale.y), scale.z);
  21. float minOverMiddleScale = minScale / (scale.x + scale.y + scale.z - minScale - maxScale);
  22. float areaYZ = scale.y * scale.z;
  23. float areaXZ = scale.x * scale.z;
  24. float areaXY = scale.x * scale.y;
  25. float scaledBorderWidth = borderWidth;
  26. if (abs(normal.x) == 1.0) // Y,Z plane.
  27. {
  28. scale.x = scale.y;
  29. scale.y = scale.z;
  30. if (areaYZ > areaXZ && areaYZ > areaXY)
  31. {
  32. scaledBorderWidth *= minOverMiddleScale;
  33. }
  34. }
  35. else if (abs(normal.y) == 1.0) // X,Z plane.
  36. {
  37. scale.x = scale.z;
  38. if (areaXZ > areaXY && areaXZ > areaYZ)
  39. {
  40. scaledBorderWidth *= minOverMiddleScale;
  41. }
  42. }
  43. else // X,Y plane.
  44. {
  45. if (areaXY > areaYZ && areaXY > areaXZ)
  46. {
  47. scaledBorderWidth *= minOverMiddleScale;
  48. }
  49. }
  50. float scaleRatio = min(scale.x, scale.y) / max(scale.x, scale.y);
  51. if (scale.x > scale.y)
  52. {
  53. scaleInfo.x = 1.0 - (scaledBorderWidth * scaleRatio);
  54. scaleInfo.y = 1.0 - scaledBorderWidth;
  55. }
  56. else
  57. {
  58. scaleInfo.x = 1.0 - scaledBorderWidth;
  59. scaleInfo.y = 1.0 - (scaledBorderWidth * scaleRatio);
  60. }
  61. #endif
  62. gl_Position = viewProjection * world * vec4(position, 1.0);
  63. }